【发布时间】:2012-04-16 22:46:47
【问题描述】:
假设我有一台具有 12MB 缓存的 6 核机器。我将它用于具有几 GB 堆的服务器应用程序(其中大部分是 2 级 Hibernate 缓存)。
我注意到大多数时候我有少数线程主动服务于客户端请求(消耗 CPU 和与 DB 通信),以及大约 30-50 个线程只与客户端进行良好的同步网络 IO。
在学习 Java 内存模型时,我想知道这是否会影响性能。许多网络 IO 线程之一的上下文切换是否会破坏“活动”线程的线程/CPU 缓存?这种级别的并发本身是否有害(除了内存缓存)?
考虑到 CPU 缓存相对于整个应用程序内存有多小,这真的很重要吗?如何确定边界在哪里?
【问题讨论】:
-
在相关说明中,为了最大限度地减少上下文切换,您是否考虑过使用异步 IO? stackoverflow.com/questions/2794535/…
-
@Slugart 这个问题实际上是使用异步 IO 研究的一部分。试图弄清楚我是否已经受到影响(以及我是否得到了正确的记忆模型的影响)以及是否值得。
-
理论上它更有效,因为 PeterLawrey 提到会发生上下文切换。在实践中,由您来衡量场景中的差异。
标签: java multithreading java-memory-model