误解了单线程和多线程编程之间的区别

Eng*_*uad 21 language-agnostic multithreading

我对单线程和多线程编程之间的区别有误解,所以我想要回答以下问题以使一切清楚.

假设有9个独立的任务,我想用单线程程序和多线程程序完成它们.基本上它会是这样的:

单线程:

- Execute task 1
- Execute task 2
- Execute task 3
- Execute task 4
- Execute task 5
- Execute task 6
- Execute task 7
- Execute task 8
- Execute task 9
Run Code Online (Sandbox Code Playgroud)

多线程:

线程1:

- Execute task 1
- Execute task 2
- Execute task 3
Run Code Online (Sandbox Code Playgroud)

线程2:

- Execute task 4
- Execute task 5
- Execute task 6
Run Code Online (Sandbox Code Playgroud)

Thread3:

- Execute task 7
- Execute task 8
- Execute task 9
Run Code Online (Sandbox Code Playgroud)

据我所知,一次只执行一个线程(获取CPU),一旦量程完成,线程调度程序将把CPU时间给另一个线程.

那么,哪个项目将提前完成?它是多线程程序(逻辑上)吗?或者它是单线程程序(因为多线程有很多上下文切换需要一些时间)?为什么?我需要一个很好的解释:)

hvg*_*des 25

这取决于.

你有多少cpus?您的任务涉及多少I/O?

如果你只有1个cpu,并且任务没有阻塞I/O,那么单线程将完成等于或快于多线程,因为切换线程有开销.

如果你有1个CPU,但任务涉及到很多阻塞I/O的,你可能会看到通过使用线程,假设工作时,I/O正在进行中可以做到的加速.

如果你有多个cpus,那么你应该看到单线程上多线程实现的加速,因为多个线程可以并行执行.当然,除非I/O主导任务,否则限制因素是您的设备速度,而不是CPU功率.


Guf*_*ffa 8

据我了解,一次只能执行一个线程

如果CPU只有一个核心就是这种情况.现代CPU具有多个内核,可以并行运行多个线程.

运行三个线程的程序运行速度几乎快三倍.即使任务是独立的,计算机中仍有一些资源必须在线程之间共享,例如内存访问.