2016-03-04 61 views

回答

1

编号上下文切换是存储和恢复线程状态的过程。当你的CPU支持更多线程时,这一点很重要。这样你的操作系统就可以在少量的物理线程上模拟许多线程。简单地说就是more threads == more overhead,因为上下文切换必须更频繁地发生(所以我们仍然会并行地发生错觉)。直到它崩溃你的系统。 :)

但是,当线程在任务之间切换时,这些任务必须存储在某个地方。这通常由一个队列完成。所以从线程的角度来看,这只是queue.pop()并继续处理。

现在无论执行什么队列,都必须有一致性和原子性保证.pop()操作。这样的保证总是伴随着一个小的(或者很大的,依赖于实现的)开销。

所以是的,任务之间的切换会带来性能问题,但这与上下文切换无关。

+0

我明白了。感谢您的澄清。因此,如果我设置了大小为50的线程池,并且只有4个物理线程可用,那么在50个右侧之间仍然会有一些上下文切换? – frodo

+0

@frodo是的,当然。但是你应该对'50'很好,这个数字很小,开销应该很小。 – freakish

+0

好的很酷。我想我正在寻找关于如何选择线程池大小的指南。 – frodo

相关问题