Возникла проблема с обработкой огромного количества запросов к серверу...
Если использовать fork() - то это еще одна запись в таблице процессов
Если количество таких запросов может перевалить за несколько тысяч...то произойдет переполнение таблицы процессов и тогда......Может я где-то заблуждаюсь)
В общем хотелось бы обойти эту проблему с помошью thread-ов...
Тогда чем отличаеться thread от полноценного процесса?Только нигде не нашел пока толкового HELP_а....
ПОМОГИТЕ ЧЕМ МОГИТЕ!
>Возникла проблема с обработкой огромного количества
>запросов к серверу...
>Если использовать fork() - то это
>еще одна запись в таблице
>процессов
>Если количество таких запросов может перевалить
>за несколько тысяч...то произойдет переполнение
>таблицы процессов и тогда......Может я
>где-то заблуждаюсь)
> В общем хотелось бы обойти
>эту проблему с помошью thread-ов...
Ты будешь смеяться, но в фрюниксах threads
реализованы как отдельные процессы.
>
>Тогда чем отличаеться thread от полноценного
>процесса?
>
>Только нигде не нашел пока толкового
>HELP_а....
>
>ПОМОГИТЕ ЧЕМ МОГИТЕ!
>Ты будешь смеяться, но в фрюниксах
>threadsНу, во-первых, не во всех UNIX-ах это так.
>>Возникла проблема с обработкой огромного количества
>>запросов к серверу...
>>Если использовать fork() - то это
>>еще одна запись в таблице
>>процессов
>>Если количество таких запросов может перевалить
>>за несколько тысяч...то произойдет переполнение
>>таблицы процессов и тогда......Может я
>>где-то заблуждаюсь)А во-вторых - максимальное число процессов в системе обычно 65535 (размер pid_t). Если тебе этого мало, то с сожалением могу сообщить, что при таком количестве потоков на одно приложение (вне зависимости от того, как реализованы эти потоки, через процессы или native), система будет жутко тормозить при переключении потоков (впрочем как и процессов, что будет для неё легче - зависит от конкретной реализации ОС).
Следовательно, выход - уменьшать время обработки запроса и/или переадресовывать запросы на др. сервера (но это уже отдельная песня, да ещё проблемы с балансировкой нагрузки...)
>Тогда чем отличаеться thread от полноценного
>процесса?Тем что для нового процесса создается новое виртуальное пространство. Т.е. происходит копирование всех переменых программы статические/автоматические/и даже динамические (кроме того создаются еще определенные системные структуры). Взаимодействие между процессами обычно организовывается посредством различных видов каналов или сигналов. В отличии от порожденных процессов, все thread работают в том же адресном пространстве процесса и могут взаимодействовать друг с другом по средством общих структур данных, например глобальных переменных. При этом возникает необходимось их синхронизации при доступе к одним и тем же данным. Синхронизация делается с помощью мутексов, семафоров и т.д. Благодаря тому, что для thread'ов не надо наличие отдельного виртуального пространства они гораздо "легче" для системы (хотя это зависит от реализации). Существует несколько стандартов на API для thread'ов. Однин от фирмы Sun, а другой определен в POSIX.
>Только нигде не нашел пока толкового
>HELP_а....Можно почитать книгу "Программирование на С++ для UNIX" или в мане что-нибудь о pthread_create.