先学习一些基础的概念吧
1. 并发和并行
我也不用特别书面的语言去说了,说的干脆一点
- 并行就是同一时刻,同时执行多项任务
- 并发就是某一段时间,执行了多项任务。但这段时间内的某一时刻,只能同时执行一项任务
并行其实好理解,关于并发,举个生活中的例子,我们常说一心不能二用,讲的就是人的大脑同一时间只能做一件事情,所以人做事情不能做到并行,只能并发。比如我们可以边吃饭边玩手机,在我们吃饭的这一段时间,我们可以认为是做了吃饭,以及玩手机两件事,属于是并发,但在某一个时刻,比如某一秒,我们是只能做一件事情的,比如在吃饭的这一刻就无法专心玩手机。这就是一个在生活中,并发的一个很好的例子。
我们平时所讲的多线程并发,和上面的官方解释还有点不同。如果你的电脑CPU是单核的,那同一时间也只能处理一项任务,此“多线程并发”中的“并发”乃真“并发”。同一时间还是只做了一项任务,只是由于CPU运行速度非常快,造成我们在感知上,以为是同时执行了多项任务而已。而假如你的电脑CPU是多核的,那同一时间,能同时处理多项任务,此“多线程并发”中的“并发”,乃真“并行”。所以,具体情况具体分析,现在来讲,一般CPU都是多核的,所以大部分还是可以做到真“并行”的。
2. 程序,进程和线程
这又是一个老生常谈的问题,我也说的干脆一点
- 程序是指令和数据的集合,是一个静态的概念
- 进程是程序的一次执行过程,是一个动态的概念,是资源分配的最小单位
- 线程是CPU调度的最小单位,一个进程可以有若干个线程
关于进程和线程的区别,我之前在知乎翻到过一篇文章,我认为,这是我遇到的文章里面,关于两者区别讲解最通俗易懂的。如果懒得打开链接,也可以直接看下面的图。
3. 多线程概念
其实多线程非常常见。如上面所说,在一个进程中,往往有多个线程同时在跑,比如微信,聊天的同时,还可以打开语音通话,多个线程同时运行,这就是多线程。
再比如 Java程序,除了main线程外,还有垃圾回收线程,这也是并发。
那么
- 线程应该如何去创建?(多线程实现)
- 线程创建多了,会不会有不好的影响?怎么去解决?(线程同步)
- 多个线程之前怎么进行通信?(线程通信)
这些问题,将会一一在此专栏中解答。