单核和多核,单进程和多进程,单线程与多线程

2019-07-15  本文已影响0人  imakan

之前我对单进程、多进程、单线程、多线程,单核、多核、并发、并行;总是没有详细的认知;因此准备归纳总结下,加强自己的记忆。(这里的并发不是网络并发,请区别对待)

CPU可以分为单核和多核;Application可以分为单进程和多进程;进程可以分为单线程和多线程;而并发和并行是指进程或者线程在不同个数CPU或者不同核数CPU中的执行方式;

我们先理解下进程在CPU中的并行方式:

CPU运行图.png
当应用的进程状态是Running时(使用系统命令top可以查看),调度器会让进程进行排队,然后进入就绪队列,通过分派器进程控制块处理后,交给CPU,当CPU计算完后,移出队列。到此程序就完成了一次执行。

其实我们不难发现,如果多个进程同时进来,那CPU时间片也是一个一个的运行。由于时间片的切换非常快,基本上都是在ms间完成的,所以进程的执行在宏观上是并发的,但是在微观上是串行的。

结论:

到这里理解了进程在单CPU的运行方式;在单CPU单核中进程的并发;如果是多CPU,进程是可以并行的

进程执行需要系统资源,但是不同的进程间是无法共享CPU,怎么样才能共享资源和CPU呢?线程(有些程序中叫协程)的概念就出现了,线程是被包含在进程中,同一进程中的不同线程可以共享CPU程序上下文(进程被分配到的资源)

在单核单CPU中,在同一个进程中的不同线程想要使用CPU核心,则会进行线程切换,但是由于共享了程序执行环境,这个线程切换会比进程切换开销小很多。注意:由于CPU是单核的,所以同时刻只能执行一个线程,所以说这里依然是并发。

如果我们的CPU是多核的呢?那么进程中的不同线程就可以同时运行了,真正的并行就出现了

到这里理解了同一进程中的单线程和多线程在单CPU的运行方式;在单CPU多核中进程的并行;

文章的开头我们提到过线程是CPU调度和分配的基本单位。要和进程是操作系统进行资源分配的最小单位区分;假设我是CPU,操作系统调度器将一个进程分配给我之后,我拿到进程后,能看到什么,是不是只能看到进程中的多个线程,那么我现在能调度和分配的是不是只能是线程。如果我是4核的,把线程ABCD分配到核心1234,其他的线程依然要等待分配。所以线程是CPU调度和分配的基本单位。

总结

CPU中进程只能是并发,多CPU中进程可以并行。
CPU单核中线程只能并发,单CPU多核中线程可以并行。

理解了上面这些关系,再去看看 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理,思路会更加清晰

上一篇下一篇

猜你喜欢

热点阅读