配置线程池以减少上下文切换[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

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

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

他们的意思是什么?

java multithreading threadpool
1个回答
0
投票

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

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

要么

core是单线程的,每个线程通过最小化上下文切换的数量(当一个被阻塞,其他的做计算时)最大化可用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

© www.soinside.com 2019 - 2024. All rights reserved.