Я создаю небольшое клиентское / серверное приложение для чата.Я столкнулся с NIO.2
после того, как попытался смоделировать его, используя классическую библиотеку NIO
.
Целью моей "симуляции" библиотеки NIO.2 с NIO classisc было использование нескольких селекторов в нескольких потоках, которые попарно соединены через ArrayBlockingQueue
, чтобы избежать чтения и записи в сетиtimes.
Мой вопрос заключается в том, как обрабатывается несколько событий одновременно в библиотеке NIO.2 с использованием AsynchronousSocketChannels
и CompletionHandlers
(которые, на мой взгляд, являются обратными вызовами)?
Классическая NIO
lib использует Selectors
, которая доставляет после select
вызова key set
.Затем этот key set
может быть повторен, и каждое событие (чтение, принятие и запись) может обрабатываться одно за другим.
С другой стороны, обратные вызовы NIO.2
не имеют такой последовательности.Они асинхронны.Так что же произойдет, если, например, 2 клиента отправляют в одно и то же время сообщение на сервер?
Затем запускаются 2 обратных вызова одновременно?И если да, то как?Каждый из них работает в отдельных потоках или нет?
И если бы я взял эти сообщения от каждого из обратных вызовов и попытался поставить их в очередь, как упоминалось ранее ArrayBlockingQueue
, они бы подождали друг друга илинет?