美文网首页
进程和线程、并行和并发、单核和多核CPU

进程和线程、并行和并发、单核和多核CPU

作者: H14ugust | 来源:发表于2018-10-13 22:07 被阅读0次

    一.进程

    • 进程和线程都是操作系统的概念。

    • 进程是操作系统对正在运行的程序的一种抽象。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程是操作系统进行资源分配的最小单元。一个系统上可以同时运行多个进程,在大多数系统中,需要运行的进程数是允许多于可以运行它们的CPU数的。

    • 并发是指一个进程的指令和另一个进程的指令是交错执行的。操作系统实现这种交错执行的机制成为上下文切换。所谓上下文,是指操作系统保持跟踪进程运行所需的所有状态信息,例如PC、寄存器文件的当前值、主存内容等。

    • 任一时刻,单处理器系统都只能执行一个进程的代码。当操作系统决定要把控制权从当前进程转换到某个新进程,就会执行上下文切换,即保存当前上下文,恢复新进程的上下文,然后将控制权转交给新进程。

    二.线程

    • 一个进程可由多个称为线程的执行单元组成,每个线程都运行在同一进程的上下文中,共享同样的代码和全局数据。每一个进程至少有一个主执行线程,它无需由用户去主动创建是由系统自动创建的用户根据需要在应用程序中创建其它线程多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源。

    • 线程是CPU调度和分配的基本单元。线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核心数

    • 系统创建好进程后,实际上就启动执行了该进程的执行主线程,主执行线程以函数地址形式,即程序入口函数比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

    • 多线程较之多进程更易共享数据,线程一般来说比进程更高效。在如网络服务器等对并行处理有较高需求的场景,线程是更好的选择。多线程在多处理器系统中是使程序更有效率的手段。系统效率而非运行效率。

    三.并发和并行

    • 并发 concurrency 是一个通用的概念,指一个同时具有多个活动的系统。

    • 并行 parallelism 指的是用并发使一个系统运行的更快。

    • 并发:在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

    • 并行:在同一时刻,有多条指令在多个处理器上同时执行。

    四.CPU和核心

    1.物理核

    • 物理核心数量=CPU数(机器实装的CPU数)*每个CPU的核心数

    2.虚拟核

    • 所谓的4核8线程,4核指的是物理核心,通过超线程技术,用一个物理核模拟两个虚拟核,每个核两个线程,总数为8线程。

    • 在操作系统看来是8个核,但实际上是4个核。

    • 超线程技术可以实现单个物理核的线程级并行运算。但性能不及两个物理核。

    • 超线程,有时称为同时多线程,是一项允许一个CPU执行多个控制流的技术。涉及CPU的某些硬件具有多个备份,比如程序计数器和寄存器文件,而其他的硬件部分只有一份,比如执行浮点算术运算的单元。超线程通过共享单处理器的一部分原件,实现比如一个进程(线程)必须等到某些数据被装载到高速缓存中,那CPU就可以继续去执行另一个进程(线程)。

    3.单核CPU和多核CPU

    • 都是一个CPU,不同的是每个CPU上的核心数。

    • 多核CPU是多个CPU的替代方案,同时也减少了功耗。

    • 一个核心只能同时执行一个线程

    • 多核是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。而多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。

    • 单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已, 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑,效率不会有提高,切换线程反倒会增加开销。

    4.多线程

    • 多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置.

    • 单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

    • 单核CPU——IO密集型任务,使用多线程还是为了人机交互方便.

    • 多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。

    参考资料

    [1].《深入理解计算机系统(原书第2版)》

    [2].http://www.cnblogs.com/-new/p/7234332.html

    [3].https://www.jianshu.com/p/0917b5109ecf

    [4].https://www.cnblogs.com/caihuafeng/p/5438753.html

    图片出处

    https://unsplash.com/photos/x2k9A5I8hjY

    相关文章

      网友评论

          本文标题:进程和线程、并行和并发、单核和多核CPU

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