正文
单核时代
单核 CPU 情况下,线程实际上是串行执行任务的。操作系统这个 BOSS,手底下有个狗腿子叫任务调度器,将 CPU 的时间片段分给不同线程使用。
因为计算机的线程切换速度非常快,给人感觉就是同时运行的错觉。
一般将这种 线程轮流使用 CPU 的做法称为并发。一句话概括:微观上串行,宏观上并行。
多核时代
当然,时代是在进步的,现在的计算机基本上是多核 CPU 了,什么双核四线程,八核十二线程的,归根结底都是为了提高 CPU 的利用率。
多核 CPU 下,每个核都可以调度运行线程,这时的线程可以是并行的。
假设一个 双核的 CPU 的核数恰好在处理两个线程,如 核 1 处理 线程 1;核2 处理线程 2,这种理想的情况我们可以称为并行。
概念
并发:同一时间应对多件事情的能力
并行:同一时间动手做多件事情的能力
可能很抽象,我先把一个单核 CPU 比喻成一个程序员。他每天的开发任务有,写后端代码、写前端代码、测试代码、还特么得持续跟甲方沟通需求。
如果他一个人轮流交替做这 4 件或多件事,这就是并发。
可能老板“良心”发现,就多雇佣了 3 个实习生,实习生 A 负责前端、实习生 B 负责测试,而他负责后端,实习生 C 更甲方沟通需求,他们互不影响,这就并行。
特点
-
优点:
多线程并发是为了提高程序的执行效率,可以尽可能的压榨CPU性能,像极了老板每天压榨你每一分每一秒。
-
缺点
线程过多会影响性能,毕竟上下文切换是有成本的;
会占用过多的内存空间;
如果多个线程在共享同一个资源,可能会发生死锁;