Perl-скрипты, использовать вилки или потоки? - PullRequest
4 голосов
/ 17 ноября 2010

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

так что для началаУ меня есть скрипт, который ищет IP-адрес в базе данных mysql, а затем подключается к каждому серверу, получает некоторую информацию и затем снова помещает ее в базу данных.

То, о чем я думал, есть ограниченное количествовремя, чтобы сделать это, и если у меня есть 100 серверов, потребуется немного времени, чтобы выйти на каждый сервер, получить информацию, а затем отправить ее в БД.Итак, я подумал об использовании вилок или потоков в Perl?

Какой вариант предпочтителен в моей ситуации?И у кого-нибудь есть какие-нибудь примеры?

Спасибо!

Редактировать: Хорошо, так что нужно немного больше информации: я работаю в Linux, и я подумал, что могу получить мастер-скрипт для сбораинформацию БД, затем отправьте каждый подпроцесс / задачу для подключения и сбора информации, а затем отправьте информацию обратно в БД.

Ответы [ 2 ]

4 голосов
/ 02 октября 2012

Что лучше всего зависит от ваших потребностей;но что стоит, вот мой опыт:

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

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

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

Проблемы с вилками (библиотека, а не команда fork):

  • Все еще запутана система базы данных
  • Общие переменные по-прежнему очень ограничены
  • Переопределил команду 'fork', что привело к неожиданному поведению в другом месте программного обеспечения
3 голосов
/ 17 ноября 2010

Форкинг более «ресурсосберегающий» (например, модули баз данных и т. Д.), Чем многопоточность, поэтому вы можете захотеть оказаться на этом пути.

В зависимости от выбранной вами платформы, с другой стороны,Вы можете избежать fork() -ing в Perl.Цитата из perlfork (1):

Perl предоставляет ключевое слово fork (), которое соответствует системному вызову Unix с тем же именем.На большинстве Unix-подобных платформ, где доступен системный вызов fork (), Perl fork () просто вызывает его.

На некоторых платформах, таких как Windows, где системный вызов fork () недоступен, Perl может бытьпостроен для эмуляции fork () на уровне интерпретатора.Хотя эмуляция спроектирована так, чтобы быть максимально совместимой с реальным fork () на уровне программы Perl, существуют некоторые важные различия, связанные с тем фактом, что все псевдо-дочерние «процессы», созданные таким образом, живут в одном и том жереальный процесс для операционной системы.

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