我对单线程编程和多线程编程之间的区别有一个误解,所以我希望下面的问题有一个答案来说明一切。
假设有9个独立的任务,我想用一个单线程程序和一个多线程程序来完成它们。基本上是这样的:
Single-thread:
- 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
Multi-threaded:
Thread1:
- Execute task 1
- Execute task 2
- Execute task 3
Thread2:
- Execute task 4
- Execute task 5
- Execute task 6
Thread3:
- Execute task 7
- Execute task 8
- Execute task 9
据我所知,一次只执行一个线程(获取CPU),一旦量程完成,线程调度程序将把CPU时间分配给另一个线程。
那么,哪个程序会提前完成呢?是多线程程序(逻辑上的)吗?或者是单线程程序(因为多线程有大量的上下文切换,这需要一些时间)?为什么?我需要一个很好的解释:)
发布于 2012-04-11 17:10:02
那得看情况。
你有多少个CPU?在你的任务中涉及多少I/O?
发布于 2012-04-11 17:10:32
据我所知,一次只执行一个线程。
如果CPU只有一个内核,情况就会如此。现代CPU有多个核心,可以并行运行多个线程。
运行三个线程的程序运行速度将快近三倍。即使任务是独立的,计算机中仍有一些资源必须在线程之间共享,比如内存访问。
发布于 2012-04-11 17:28:42
假设集:没有超线程的单核任务;任务是CPU约束的;每个任务需要3量子时间;每个调度器分配的时间限制为1量子;FIFO调度器不可抢占;所有线程同时命中调度器;所有上下文切换都需要相同的时间。
程序的划分如下:
在上述假设下,它们都同时完成。这是因为CPU调度的时间是相同的,上下文开关是相同的,没有中断处理,也没有等待IO的东西。
要更深入地了解这一点,请查找这本书。
https://stackoverflow.com/questions/10110660
复制相似问题