Зачем иметь несколько потоков на сервере - PullRequest
0 голосов
/ 02 марта 2011

Я создаю сервер для отправки данных во многие постоянные сокеты. Я выбрал шаблон проектирования REACTOR, который предполагает наличие нескольких потоков для отправки данных по сокетам.

Я не могу понять, что лучше: - иметь один поток для отправки всех данных в сокеты - Или есть несколько потоков для отправки данных через сокеты.

Я вижу это так, что у меня 2 ядра. Так что я могу сделать только две вещи одновременно. Что означает, что у меня есть 1 рабочий поток и 1 поток для отправки данных?

Почему было бы лучше иметь несколько потоков для отправки данных, когда вы страдаете от переключения контекста между потоками?

1 Ответ

0 голосов
/ 02 марта 2011

См. Документацию по thttpd относительно того, почему однопоточный не блокирующий ввод / вывод является хорошим .Действительно, это имеет смысл для статических файлов.

Однако, если вы выполняете CGI, у вас может быть скрипт, который выполняется в течение длительного времени.Лучше не задерживать весь более быстрый трафик, особенно если в скрипте есть ошибка с бесконечным циклом, и он в конечном итоге будет уничтожен в любом случае!С потоками среднее время отклика пользователей будет лучше - если некоторые запросы занимают очень много времени.

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

...