繁体   English   中英

运行许多IO线程是否会影响一些CPU密集型线程的性能?

[英]Does running many IO threads impact performance of a few CPU-intensive threads?

假设我有一台具有12MB​​缓存的6核计算机。 我将其用于具有几GB堆(大部分是2级Hibernate缓存)的服务器应用程序。

我注意到大多数时候,我有少数几个线程在积极地服务于客户端请求(正在燃烧CPU和与DB通讯),以及大约30-50个以上的线程仅与客户端进行良好的同步网络IO。

在学习Java内存模型时,我想知道这是否会影响性能。 许多网络IO线程之一的上下文切换是否会破坏“活动”线程的线程/ CPU缓存? 此级别的并发本身是否有害(不考虑内存缓存)?

考虑到CPU缓存相对于整个应用程序内存有多小,这真的重要吗? 如何确定边界在哪里?

许多网络IO线程之一的上下文切换是否会破坏“活动”线程的线程/ CPU缓存?

没有硬性保证,但是我的直觉是,在实践中,CPU缓存比数量级调度程序切换线程更频繁地按数量级进行更新。 如果是这种情况,那么与已经进行的缓存更新相比,线程上下文切换所需的缓存更新的开销非常小。

如何确定边界在哪里?

通过试验和测量(分析),与大多数与性能相关的问题一样。 简单的理论近似不会起作用,因为什么在现代PC 真的会在现实比任何合理的近似更复杂。

这将产生影响,并且当活动线程多于cpus时,您可能会有些抖动。 但是,抖动通常被认为相对较小,为10到100微秒。

您可以让线程争用缓存资源,但是除了减少每个线程使用的活动数据量之外,您无能为力。 这可以将您的cpu负载减少2倍或更多倍,但是会涉及很多工作,可能需要完全重写(包括一些JDK和第三方库),并且收效甚微。 例如,您需要多少CPU负载才能降低。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM