进程是操做系统对一个正在运行的程序的抽象,即操做系统为该进程虚拟了独自的处理器资源,内存空间(又称虚拟地址空间)与磁盘空间
线程是进程中多个能够派遣的工做单位(或称执行单元,以CPU的角度来看)的集合,同一进程的多个线程共享该线程的资源(包括运行时在虚拟地址空间加载的代码,全局数据等)
并发(concurrency)从最终用户的角度来看,就是同时运行多个本地应用程序(或者网络应用程序例如 web服务器 同时处理来自多个远程用户的页面请求 / 活动链接 的过程)
并发 从计算机底层实现原理来看,是CPU等硬件 在操做系统所抽象出来的多个进程(或线程)之间快速来回切换执行的过程;具体讲,某一极短期间隔内,CPU只能执行一个进程(或线程)
超线程(hyper threading,HT)也称“同时多线程”(simultaneous multi-threading)
采用超线程技术的多核CPU的任意一个物理核心在某一极短期间隔内能够“同时”执行两个或多个线程
例如传统的单线程CPU,在某一极短期间隔内只能执行一个线程,单线程CPU在不一样线程间切换须要20,000个时钟周期
超线程多核CPU的任意一个物理核心在不一样线程间切换只须要一个时钟周期;
典型的例子是 Intel Core i7 四核心处理器,一个物理核心能够同时执行两个线程,
总共能够“并行”执行8个线程,等效于 拥有8个物理核心的单线程处理器(这种处理器应该没有吧?)
这也是许多硬件检测软件(验机软件,如everest等)将其视为8个逻辑核心的缘由:即多出的4个逻辑核心是经过超线程技术虚拟出来的
CPU在同一进程内的不一样线程间切换速度比在不一样进程间的切换速度快;
采用多线程编程技术的程序能够充分发挥出多核CPU的“指令级并行执行”优点,从而达到“线程级并发运行”的效果
并行(parallelism)的一个比较有实质意义的概念为“指令级并行”,是指CPU硬件同时执行多条指令的属性;
一个具体实现为 SIMD(Single Instruction Multiple Data stream,即单指令多数据流)
是一种单条指令同时控制多个数据并行运算,加速CPU在多媒体方面处理速度的技术,Intel 早期 Pentium CPU采用的MMX指令集就是SIMD技术的一种实现,
具体讲,能够同时执行4条单精度浮点数(即 C 数据类型 float )的加法运算指令,无该技术的CPU一次只能执行1条加法运算指令
SSE(Streaming SIMD Extensions,即“流式”单指令多数据流“扩展”)从字面意义就能够了解它是SIMD技术的“流式扩展”版本;
SSE1指令集在MMX指令集的基础上增长70条用以“并行”处理多媒体与3D图形方面的指令;
此后的SSE2,SSE3等新增的指令条数愈来愈多,但无非是加强CPU在多媒体,3D图形图像,网络数据流方面的处理速度