асинхронное программирование - PullRequest
3 голосов
/ 08 января 2010

gcc 4.4.1

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

Однако из того, что я понял из моих исследований, я думаю, что мне нужно использовать Async.

1) Использование синхронного программирования будет означать, что вызовы будут заблокированы и создадут бутылочную горловину. Система просто зависнет при высокой нагрузке

2) Использование синхронного программирования с использованием потоков создаст новый поток для каждого клиента, что будет означать, что при высокой нагрузке системные ресурсы могут быть израсходованы, что может сделать систему слишком сложной для обработки всех этих потоков.

3) Использование Async означало бы, что мне нужно разработать конечный автомат ???

Кто-нибудь может указать мне правильное направление? В программировании в Aysnc?

Большое спасибо за любой совет,

Ответы [ 2 ]

4 голосов
/ 08 января 2010

помещает входящие запросы в очередь

использует один поток для отправки очереди

запросы, взятые из очереди, выполняются в своем собственном потоке;очередь может регулировать количество активных потоков (пул потоков), чтобы предотвратить перегрузку сервера.Запросы не будут потеряны, но они могут некоторое время находиться в очереди в ожидании обработки.

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

goodудачи!

1 голос
/ 08 января 2010

Есть много способов справиться с этой проблемой.

Вы можете написать программу, которая контролирует порт и порождает поток при получении запроса.

Вы можете написать однопоточную программу и использовать inetd, чтобы установить ее в качестве обработчика для данного порта. Экземпляр вашей программы будет запускаться при каждом подключении клиента.

Вы можете использовать конечные автоматы, очереди, управляемые событиями модели, всевозможные вещи.

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

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