一.进程
-
进程和线程都是操作系统的概念。
-
进程是操作系统对正在运行的程序的一种抽象。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,即进程是操作系统进行资源分配的最小单元。一个系统上可以同时运行多个进程,在大多数系统中,需要运行的进程数是允许多于可以运行它们的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
网友评论