![]() |
1
1
您可以将其中一些线程关联到单个核心。但你必须这么做 be extremely careful when doing so 为此,可以使用 BeginThreadAffinity 方法强制线程保持固定到特定处理器或内核的标识。 |
![]() |
2
2
实际上,跨核心上下文切换不太可能对应用程序性能造成不利影响。 任何上下文切换都会产生约1-4微秒的直接成本来保存/恢复线程状态,再加上缓存预热的间接成本。间接成本取决于许多因素,如数据位置和访问模式,并且变化很大:从数百纳秒(几乎不增加总的上下文切换成本)到数百微秒(增加总成本两个数量级)。 尽管可以合理地预计,对于跨核心上下文切换,缓存预热将花费更长的时间(如果新核心不与旧核心共享缓存),将线程调度到同一个核心仍然需要缓存预热,因为线程的部分或全部数据将被在该核心上执行的其他线程从缓存中逐出。
只有在病态的情况下,即当一个线程使用完全适合非共享缓存的同一数据集长时间工作时,跨核上下文切换才会对性能产生明显的影响。大多数时候,它们不会成为瓶颈。
作为旁注,与伊布什金的建议相反,
有用的链接:
Using Concurrency for Scalability
|