Допустим, у меня есть 6-ядерная машина с 12 МБ кеш-памяти. Я использую его для серверного приложения, у которого есть несколько гигабайт кучи (большая часть из них - кеш Hibernate 2-го уровня).
Я заметил, что большую часть времени у меня есть несколько потоков, активно обслуживающих клиентские запросы (сжигание ЦП и общение с БД), а также еще около 30-50 потоков, которые выполняют только старый хороший синхронный сетевой ввод-вывод с клиентом.
Когда я изучаю модель памяти Java, мне интересно, может ли это повлиять на производительность. Разрушает ли переключение контекста для одного из множества сетевых потоков ввода-вывода кэш потоков / ЦП «активных» потоков? Вреден ли сам по себе этот уровень параллелизма (не считая кеша памяти)?
Имеет ли это значение, учитывая, насколько мал кеш ЦП по отношению ко всей памяти приложения? Как определить границу?