Java NIO: как эффективно защитить глобальные данные? - PullRequest
3 голосов
/ 29 марта 2011

Есть ли разница в способах защиты ресурсов в модели потокового соединения и модели NIO (например, с использованием Netty )?Например, если у нас есть какой-то глобальный объект, наиболее очевидная вещь, чтобы сделать его методы поточно-ориентированными, это сделать их syncronized.

Должны ли мы использовать тот же подход при работе с коммуникацией на основе NIO?Как я понимаю, поток в NIO является более ценным ресурсом, чем поток на соединение.Если несколько потоков будут заблокированы в ожидании освобождения синхронизированного ресурса, может ли это повлиять на производительность обработки других запросов, не связанных с этим ресурсом?Если это зависит от реализации, как все это работает в Netty в частности?

1 Ответ

1 голос
/ 29 марта 2011

Реализация безопасности потоков для NIO такая же, как и для любого другого пула потоков. (Если нет только одного потока;)

Если у вас есть небольшое количество или большое количество потоков (в основном бездействующих), горячие ресурсы задержат вашу обработку. Проблема в основном та же самая.

Вы обрабатываете задачи, а не ресурсы. Горячие ресурсы могут задерживать задачи, которые используют эти ресурсы, но не задачи, которые от них не зависят.

...