美文网首页
单核和多核,单进程和多进程,单线程与多线程

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

作者: imakan | 来源:发表于2019-07-15 17:38 被阅读0次

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

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

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

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

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

结论:
  • 调度器CPU分成一段段的时间片;每个时间片有最大时间和最小运行时间(linux下是5ms-800ms)。(时间片算法,咱也不懂,咱也不知道找谁问)
  • os调度系统依次选择每个进程,最多执行时间片指定的时长。
  • 通过进程控制块,我们可以看出一个进程是可以包含多个线程的。
  • 进程是资源分配的基本单位;这里的资源是指:内存、硬盘、显卡、GPS等等,这也就是程序上下文(后面会讲线程是CPU调度和分配的基本单位,要注意区分)

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

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

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

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

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

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

总结

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

  • 多核CPU同时可以执行多个线程,有几个核就能执行几个线程。
  • 这些线程分属不同进程的话就是执行了多个进程。
  • 这些线程分属同一个进程的话就是只执行了一个进程的不同线程。
  • 多核CPU和多个CPU运行机制相同也不同,单就运行多线程任务来讲原理是差不多的。

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

相关文章

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

    之前我对单进程、多进程、单线程、多线程,单核、多核、并发、并行;总是没有详细的认知;因此准备归纳总结下,加强自己的...

  • iOS - Multi-Thread

    概念篇 进程 线程 多线程 单核多线程 & 多核多线程 并行 & 并发 同步 & 异步 队列 队列 & 任务 的执...

  • js的单线程和多进程

    概述 现行的软件架构主要有两种:单进程多线程(如:memcached、redis、mongodb等)和多进程单线程...

  • 多线程

    1。单进程单线程:一个人在一个桌子上吃菜。 2。单进程多线程:多个人在同一个桌子上一起吃菜。 3。多进程单线程:多...

  • Python---多进程与多线程笔记

    1.多进程与多线程介绍 / 区别 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由...

  • Python之多线程开发

    以前我们接触的都是单线程单进程的python编程方式,从今天开始我们开始接触多线程和多进程的开发模式。首先多线程就...

  • Nodejs如何充分利用多核CPU

    Nodejs单进程带来的问题 大家都知道, nodejs是单进程单线程的,但是现在的服务器基本都是多核的,这导致了...

  • 深入浅出nodejs(玩转进程)

    多进程构架 面对单进程单线程对多核使用不足问题,前人经验是启动多个进程,理想状态下每个进程各自利用一个cpu,以此...

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

    1. 简介 用户打开浏览器,其实就是打开了浏览器应用程序。那么什么是程序呢?我们常说浏览器是多线程的,JS 是单线...

  • 多进程架构 child_process

    面对单进程单线程对多核使用不足的问题,理想状态下每个进程各自利用一个cpu,以此实现多核CPU的利用,nodejs...

网友评论

      本文标题:单核和多核,单进程和多进程,单线程与多线程

      本文链接:https://www.haomeiwen.com/subject/tmywkctx.html