AFAIU, epoll (7) не создает новые темы самостоятельно (см. Также pthreads (7) ...).Вам нужен другой вызов (используя pthread_create (3) или базовый системный вызов clone (2) , используемый pthread_create
...) для создания потоков.
Узнайте больше о проблеме C10K (которую сегодня следует называть C100K) и некотором учебнике pthread .Но похоже, что ваша программа может потреблять много вычислительных ресурсов, а не ограничиваться вводом-выводом.Таким образом, узким местом может быть мощность компьютера (тогда вы не сможете получить масштабируемость с помощью многопоточности на одном узле компьютера; вам нужно распределенные вычисления )
Потоки - это довольно тяжелые ресурсы.Таким образом, вы хотите иметь пул потоков и иметь только несколько десятков активных (т.е. работающих) потоков.См. this .
Также помните о других системных вызовах мультиплексирования (таких как poll (2) ), о неблокирующем IO ( fcntl (2)) с O_NONBLOCK
), асинхронного ввода-вывода (см. aio (7) ).
Я рекомендую использовать некоторые существующие цикл обработки событий* Основанная на библиотека (см. libev , libevent , Glib , Poco , Qt , ..или для HTTP в основном: libonion на стороне сервера, libcurl на стороне клиента).Посмотрите также на 0mq .
Понятия, связанные с обратными вызовами , продолжениями , CPS , могут быть полезны и улучшить вашимышление.
Такие языки, как Го и его горутины, могут быть полезны.
Может зависать вечно ....
Этого не должно быть, еслиВы тщательно проектируете свою программу (конечно, имея циклы событий, используя что-то вроде poll
или epoll_wait
- с ограниченной задержкой менее секунды и, вероятно, предпочитая неблокирующий ввод / вывод).
Возможно, тратянесколько недель, чтобы узнать больше о операционных системах концепции должны быть полезны.Также предпочтение следует отдавать пониманию большинства системных вызовов (перечисленных в syscalls (2) ) после прочтения дополнительной информации о программировании для Linux (например, старая книга ALP или что-то более новое).Возможно, вам не нужно что-то более сложное, чем epoll
(потому что достаточно просто poll
).