Можно ли создавать потоки, а не разветвлять процесс на сервере в сокетных соединениях? - PullRequest
1 голос
/ 19 июня 2011

Я делаю простую программу, которая предполагает принимать данные TXT-файлов от клиентов. (не очень большие файлы ..)

Мне было интересно, можно ли создавать потоки с помощью pthread вместо создания другого процесса с использованием fork.

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

Ответы [ 2 ]

3 голосов
/ 19 июня 2011

Да, совершенно нормально использовать отдельные потоки для обработки клиентских соединений.Это будет быстрее по сравнению с разветвлением новых процессов.Однако существует недостаток в плане изоляции: поскольку все клиенты обрабатываются в одном и том же процессе, если этот процесс завершается, сервер не сможет обслуживать других клиентов.

0 голосов
/ 19 июня 2011

Пока вы помните об ограниченности потоков, это нормально.В частности, вам понадобится соответствующая блокировка, и у вас будут относительно небольшие стеки для работы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...