我对单线程和多线程编程之间的差异存在误解,所以我想要回答下面的问题以使一切都清楚。误解单线程和多线程编程之间的差异
假设有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
据我所知,只有ONE线程在同一时间(让CPU)来执行,一旦量子结束后,线程调度会给另一个线程提供CPU时间。
那么,哪个程序会早些完成?它是多线程程序(逻辑上)?或者它是单线程程序(因为多线程有很多上下文切换需要一些时间)?为什么?我需要一个很好的解释:)
'哪个程序会早点完成?答案:它取决于 – 2012-04-11 17:10:12
即使在单个CPU上也会异步发生许多事情:内存读取,磁盘I/O,网络I/O ......在“强制超时”期间,上下文切换通常会优先发生。无论如何,现在谁真的只有一个CPU? – 2012-04-11 17:10:47
这个问题目前的形式是无法回答的。这些任务是相互独立的,还是依赖于早期任务的结果?有多少个CPU /内核可用?任务处理器是绑定的还是I/O绑定的?在并行性(多CPU /内核,处理器绑定,独立任务)的理想情况下,多线程版本可能会更快。但也许不是。 – dlev 2012-04-11 17:12:04