В BIO каждому новому соединению выделяется поток из пула потоков Соединителя, и этот поток остается назначенным этому соединению, пока соединение не закроется.Это означает, что потоки простаивают в течение длительных периодов времени между запросами (т. Е. Во время поддержки HTTP).
В NIO каждое новое соединение передается в Poller.Поток Poller получает уведомление при наличии данных о соединении, которое необходимо обработать.Затем Poller выделяет поток для соединения из пула потоков Соединителя, и этот поток остается назначенным этому соединению, пока все данные не будут прочитаны / записаны.Затем соединение передается обратно в Poller, чтобы Poller мог отслеживать дополнительные данные.
Короче говоря, это делает NIO более масштабируемым.BIO требует одного потока в пуле потоков для каждого соединения.NIO может поддерживать гораздо больше соединений, чем BIO, и для каждого одновременно обрабатываемого запроса требуется только один поток в пуле потоков.