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
多线程:
线程1:
- Execute task 1
- Execute task 2
- Execute task 3
线程2:
- Execute task 4
- Execute task 5
- Execute task 6
Thread3:
- Execute task 7
- Execute task 8
- Execute task 9
据我所知,一次只执行一个线程(获取CPU),一旦量程完成,线程调度程序将把CPU时间给另一个线程.
那么,哪个项目将提前完成?它是多线程程序(逻辑上)吗?或者它是单线程程序(因为多线程有很多上下文切换需要一些时间)?为什么?我需要一个很好的解释:)
hvg*_*des 25
这取决于.
你有多少cpus?您的任务涉及多少I/O?
如果你只有1个cpu,并且任务没有阻塞I/O,那么单线程将完成等于或快于多线程,因为切换线程有开销.
如果你有1个CPU,但任务涉及到很多阻塞I/O的,你可能会看到通过使用线程,假设工作时,I/O正在进行中可以做到的加速.
如果你有多个cpus,那么你应该看到单线程上多线程实现的加速,因为多个线程可以并行执行.当然,除非I/O主导任务,否则限制因素是您的设备速度,而不是CPU功率.
据我了解,一次只能执行一个线程
如果CPU只有一个核心就是这种情况.现代CPU具有多个内核,可以并行运行多个线程.
运行三个线程的程序运行速度几乎快三倍.即使任务是独立的,计算机中仍有一些资源必须在线程之间共享,例如内存访问.