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

开发 后端
什么是串行?什么是并行?串行:任务进行排队,一个一个执行;并行:多个任务齐头并进。

 [[280715]]

一、什么是串行?什么是并行?

串行:任务进行排队,一个一个执行;

并行:多个任务齐头并进。

二、单核、多核这两种情况下的并行。

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

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

三、任务的两大类型。

“计算密集型”任务:

特点是要进行大量的计算,消耗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线程执行密集计算,从而提高了程序的执行效率。

责任编辑:华轩 来源: 博客园
相关推荐

2020-11-09 09:33:37

多线程

2021-06-11 11:28:22

多线程fork单线程

2023-12-01 08:18:24

Redis网络

2020-09-23 13:37:25

Redis6.0

2021-03-15 09:40:59

Redis单线程效率

2009-07-10 09:05:20

SwingWorker

2023-08-17 14:12:17

2021-01-28 11:17:49

Python爬虫单线程

2019-11-25 10:13:52

Redis单线程I

2020-11-17 10:20:53

Redis多线程单线程

2012-02-15 10:26:40

JavaJava Socket

2010-08-30 08:55:56

JavaScript引

2022-01-04 11:11:32

Redis单线程Reactor

2018-01-11 08:24:45

服务器模型详解

2022-07-20 07:45:15

多线程程序性能

2010-01-28 16:45:44

Android单线程模

2024-02-26 00:00:00

JavaScript单线程高效

2017-03-06 14:08:38

JavaScript单线程setTimeout

2022-07-18 13:59:43

Redis单线程进程

2023-10-15 12:23:10

单线程Redis
点赞
收藏

51CTO技术栈公众号