Re: Потоки или процессы?
От: aka50 Россия  
Дата: 30.12.04 22:01
Оценка: 3 (1) +1
Здравствуйте, Geralt, Вы писали:

<skip>

Сканер пишем?

G>Вариантов решения задачи я вижу четыре:

G>1. Форк и однонаправленный канал. В родительском процессе устанавливаю URL и нужные параметры, делаю форк. В дочернем процессе выполняю запрос, результаты пишу в канал в виде отформатированной строки. В родителе читаю данные из канала. Т.е. один дочерний процесс выполнят за время своей жизни один запрос.
Для данной задачи -> в топку

G>2. Префорк, SysV IPC и однонаправленный канал. Каждый дочерний процесс работает в цикле: получает URL и параметры из шаровой переменной, выполняет запрос, результаты, как и в предыдущем примере, пишет в канал.

Приемлимо, но слишком простая задача, для этого... к тому же если надо сразу по 1000 ури сканить... 1000 процессов рожать?

G>3. Потоки (треды). Так же как и вариант 1 — один запрос за все время жизни дочернего потока.

Почти тоже самое что и 1, токо быстрее немного... но все равно не эффективно.

G>4. Претрединг. Предварительно формирую нужное количество потоков. Дочерние потоки работают в цикле, получают данные из одной очереди, а результаты отправляют в другую.

Другое название Job Manager. Тоже что и 2, но тоже быстрее. И тоже тут избыточно.

G>Посоветуйте, пожалуйста, оптимальный вариант для решения поставленной задачи, учитывая тот факт, что запрос выполняется продолжительное время (1-3 секунды). После работы с перлом у меня остались некоторые впечатления насчет первого и второго решения. Вариант 1 сильно грузит систему (20-30 форков в секунду) а, второй вариант очень сильно тормозит использование SysV IPC, но без нее не обойтись, т.к. нужно двунаправленное взаимодействие.

Все гораздо проще...

Для данной конкертной задачи это все нафиг не нужно.... быстрее всего будет работать FSM в одном процессе. Ни синхронизации, ни рождения чего бы то ни было... тупо и надежно (если сильно не мудрить с логикой, иначе threads). Так реализован bind.

Вот библиотека, которая позволяет реализовать FSM в пределах одного процесса без всякого гимора.
http://www.monkey.org/~provos/libevent/

ЗЫ: там же есть ссылки на разные сканеры на этой либе... можете проверить сначала как это работает будете приятно удивлены.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.