Сколько стоит синхронизация? - PullRequest
3 голосов
/ 15 апреля 2010

Я пишу сетевое приложение, используя java.nio api. Мой план состоит в том, чтобы выполнить ввод / вывод в одном потоке и обрабатывать события в другом. Для этого мне нужно синхронизировать чтение / запись, чтобы условие гонки никогда не выполнялось.

Учитывая, что мне нужно обрабатывать тысячи соединений одновременно, стоит ли синхронизация, или я должен использовать один поток для ввода-вывода и обработки событий?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

Какую обработку событий вы делаете? Где вероятное узкое место? У тебя даже есть узкое место?

Начните с самой простой реализации и оптимизируйте узкие места, как только вы их узнаете.

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

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

Преждевременная оптимизация никому не интересна.

Однако, чтобы ответить на ваш вопрос, синхронизация между двумя потоками вряд ли станет узким местом, и вам не нужно беспокоиться о его накладных расходах.

0 голосов
/ 15 апреля 2010

Я думаю, что эффективность будет зависеть от того, насколько гранулирован синхронизированный раздел.

...