配置线程池以减少上下文切换

时间:2017-04-19 10:23:41

标签: java multithreading threadpool

我正在阅读Ignite文档,现在我在the section about performance。以下是它的内容(强调我的):

  

默认情况下,Ignite将其主线程池大小设置为2倍   可用的CPU数量。在大多数情况下,每个核心保留2个线程   可以提高应用程序的性能,因为会更少   上下文切换和CPU缓存可以更好地工作。

我不明白为什么如果我们每个核心有2个线程,它的上下文切换会更少?我想如果所有线程都忙于某项工作,那么将会有很多上下文切换,因为我们不能运行两倍于内核的作业。哪会伤害表现。

他们的意思是什么?

1 个答案:

答案 0 :(得分:0)

答案是对陈述的解释 - 因此假设作者可能正在思考并提供我的观点。

如果我们假设每个核心都是超线程的,那么这个陈述可能是正确的。每个线程最大化使用它分配的CPU时间,并且线程仍然绑定到CPU核心。

核心是单线程的,每个线程通过最小化上下文切换的数量(当一个被阻塞,其他被计算时)最大化可用CPU时间的使用

对于缓存相关提及要保持为真,进程线程必须在相当长的一段时间内保持绑定到同一核心。

很好地考虑为什么正确的线程数量比具有良好示例的更多线程更重要:https://blogs.mulesoft.com/biz/news/chasing-the-bottleneck-true-story-about-fighting-thread-contention-in-your-code/

除此之外,处理器级别的上下文切换开销是什么: 虽然过时 - 给出了好主意 - http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html