多线程的执行效率一定高于单线程吗?

发表于:2019-10-30 10:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赖皮梅    来源:博客园

#
java
#
Java
  
   一、什么是串行?什么是并行?
  串行:任务进行排队,一个一个执行;
  并行:多个任务齐头并进。
  二、单核、多核这两种情况下的并行。
  单核情况下的并行:并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的。
  多核情况下的并行:是几核,就能真正做到几核同时执行各自的任务。
  三、任务的两大类型。
  “计算密集型”任务:
  特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。
  这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。
  “IO密集型”任务:
  涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO(指把内容从硬盘上读到内存的过程,或者是从网络上接收信息到本机内存的过程)的速度远远低于CPU和内存的速度)。
  对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。
  四、看完了上面几点,我们就可以对“并行的执行效率一定会高于串行吗”这个问题作出解答了。
  答:并不一定,取决于机器的核数和任务类型。
  1.如果是执行多个计算密集型任务:
  ①单核:串行 > 并行。
  ②多核:并行 > 串行。
  2.如果是执行多个IO密集型任务:
  ①单核:并行 > 串行。
  ②多核:并行 > 串行。
  在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。
  在单CPU或单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号