并行的执行效率必定高于串行吗?(多线程的执行效率必定高于单线程吗?)

1、什么是串行?什么是并行?  html

  串行:任务进行排队,一个一个执行;
  并行:多个任务齐头并进。网络

 

2、单核、多核这两种状况下的并行。多线程

  单核状况下的并行:并不是真的是多个任务同时进行的,是须要在这任务之间来回切换(即上下文切换)的。spa

  多核状况下的并行:是几核,就能真正作到几核同时执行各自的任务。线程

 

3、任务的两大类型。设计

  “计算密集型”任务:视频

  特色是要进行大量的计算,消耗CPU资源,好比计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。
  这种计算密集型任务虽然也能够用多任务完成,可是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,因此,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。htm

  “IO密集型”任务:blog

  涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特色是CPU消耗不多,任务的大部分时间都在等待IO操做完成(由于IO(指把内容从硬盘上读到内存的过程,或者是从网络上接收信息到本机内存的过程)的速度远远低于CPU和内存的速度)。
  对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,好比Web应用。进程

 

4、看完了上面几点,咱们就能够对“并行的执行效率必定会高于串行吗”这个问题做出解答了。

  答:并不必定,取决于机器的核数和任务类型。

  1.若是是执行多个计算密集型任务
    ①单核:串行 > 并行。
    ②多核:并行 > 串行。

  2.若是是执行多个IO密集型任务:
    ①单核:并行 > 串行。
    ②多核:并行 > 串行。

  在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提升了程序的执行吞吐率。

  在单CPU或单核的计算机上,使用多线程技术,也能够把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提升了程序的执行效率。

 

原文出处:https://www.cnblogs.com/laipimei/p/11757209.html