[sisyphus] Re:Как ускорить работу с потоками?

Денис Смирнов =?iso-8859-1?q?mithraen_=CE=C1_freesource=2Einfo?=
Пт Сен 10 18:07:47 MSD 2004


On Fri, Sep 10, 2004 at 04:03:49PM +0400, Boronin Sergey wrote:

 BS> А можно в двух словах о концепциях, которые лежат в основе этих
 BS> технологий, т.е. на чем основана их работа и как реализуется
 BS> параллельность выполнения?
 BS> Если с помощью fork() то это медленнее, а пулл процессов будет отъедать
 BS> немало оперативки (гораздо больше чем потоки в процессах).

_Параллельность_ -- никак. Ибо на 1-процессорной машине её быть не может
вообще.

Идея aio -- процесс говорит "читай/пиши вон то во-о-он туда, как выполнишь
скажешь", после чего занимается другими делами (например говорит то же
самое для другого потока данных). Таким образом 1 тред может обрабатывать
очень большое количество одновременных потоков ввода/вывода (что критично,
например, на тех же web-серверах).

 BS> Кроме того, потоки удобны тем, что используют единое адресное
 BS> пространство,
 BS> Что требует конечно известной аккуратности и внимательности, но и
 BS> позволяет сделать код проще, логику его работы прозрачнее, да и памяти
 BS> по сравнению с fork() ест не в пример меньше.

Естественно. У fork() есть только одно преимущество -- изолящия, в том
числе в плане безопасности.

Поэтому один из вариантов работы системы -- один раз форкнуть несколько
процессов (с меньшими привелегиями), а потом просто перекидывать им
handle'ы (специальными сообщениями) уже после обработки авторизации.
Но это для тех, кому надёжность важнее скорости (считаные проценты на этом
но теряются).

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

-- 
С уважением, Денис

http://freesource.info




Подробная информация о списке рассылки Sisyphus