【发布时间】:2014-12-05 23:12:12
【问题描述】:
这是一个相当普遍的计算机科学问题,并不特定于任何操作系统或框架。
所以我对在线程池上切换任务相关的开销感到有些困惑。在许多情况下,为每个作业分配自己的特定线程是没有意义的(我们不想创建太多硬件线程),因此我们将这些作业放入可以安排在线程上运行的任务中。我们设置了一个线程池,然后动态分配任务以在从线程池中取出的线程上运行。
对于与在特定线程(线程池中)上切换任务相关的开销,我有点困惑(无法找到深入的答案)。 DrDobbs 的一篇文章(来源如下)指出确实如此,但我需要更深入地回答实际发生的事情(可引用的来源会很棒:))。
根据定义,SomeWork 必须在池中排队,然后运行 与原始线程不同的线程。这意味着我们必然 产生排队开销加上上下文切换只是为了将工作移动到 游泳池。如果我们需要回复原始答案 线程,例如通过消息或未来或类似的,我们将招致 另一个上下文切换。
来源:http://www.drdobbs.com/parallel/use-thread-pools-correctly-keep-tasks-sh/216500409?pgno=1
线程的哪些组件实际上在切换?线程本身实际上并没有切换,只是特定于线程的数据。与此相关的开销是多少(更多、更少或相同)?
【问题讨论】:
标签: task threadpool context-switch