线程是用于并行IO而不是CPU吗?

时间:2012-05-28 03:50:34

标签: multithreading io parallel-processing cpu process

在Guido Van Rossum的2012年Pycon演讲中,他谈到以下关于线程:

  

如果您使用线程来实现它们最初的用途,则OS级别的线程用于执行并行IO,而不是用于并行计算。 [source]

传统上,关于进程与线程的讨论围绕着调度,上下文切换成本或共享资源成本之间的差异。

但是,我从来没有学过或听说过一个概念,即对于CPU密集型任务而言,与IO相比,一个人必须比另一个更好。如果一个进程和一个线程之间基本上存在1-1关系(并不总是你可以假设的东西),那么从CPU-vs-IO的角度来看,使用哪一个呢?

标准的pthread文档没有说明这个特定的声明;有人知道更好的来源吗?

在构建已知在其中一个领域存在瓶颈的软件时,是否存在使用一个与另一个相比更好的常见情况?

1 个答案:

答案 0 :(得分:0)

大多数操作系统为每个进程提供多个线程。

这些线程可用于简单计算而无需任何交互,用于偶尔与其他线程交互的计算(通常来自同一进程),或用于与I / O交互的短计算突发。

OS设计通常不关心你用线程做什么;设计人员期待这三者并提供有效的机制来优化,安排执行,并与其他线程实现可靠的线程交互。

我可以相信Guido正在讨论Python内置的线程。这些线程的作用是设计师所说的。如果他仅将它们用于I / O,那么它们仅用于I / O.

鉴于Python是一个解释器,提供计算线程是可能的,但很奇怪;因为解释器的速度往往比编译代码快10倍,所以你所拥有的只是一个并行程序,速度比它慢了10倍。想要并行计算的人想要快速得到答案,并且因此不倾向于使用解释器。