select () PLUS неблокирующий ввод / вывод , по сути, позволяет управлять несколькими соединениями / отвечать на них, когда они входят в один поток ( мультиплексирование ), в отличие от наличия нескольких потоков / процессов обрабатывать одну розетку каждый. Цель состоит в том, чтобы минимизировать отношение площади сервера к количеству соединений.
Это эффективно, поскольку этот единственный поток использует высокий уровень активных соединений сокетов, необходимых для достижения насыщения (поскольку мы можем выполнять неблокирующий ввод / вывод для нескольких файловых дескрипторов).
Обоснование состоит в том, что требуется очень мало времени для подтверждения наличия байтов, их интерпретации, а затем выбора подходящих байтов для вывода в выходной поток. Фактическая работа ввода-вывода выполняется без блокировки этого потока сервера.
Сервер этого типа всегда ожидает подключения, блокируя выбор (). Как только он получает его, он обрабатывает соединение, а затем повторно обращается к select () в бесконечном цикле. В простейшем случае этот серверный поток НЕ блокирует любое другое время, кроме случаев, когда он настраивает ввод / вывод.
Если будет установлено второе соединение, оно будет обработано в следующий раз, когда сервер выберет select (). В этот момент первое соединение все еще может быть получено, и мы можем начать отправку во второе соединение из того же потока сервера. Это цель.
Поиск " мультиплексных сетевых сокетов " для дополнительных ресурсов.
Или попробуйте Unix Network Programming от Стивенса, Феннера, Рудоффа