Журнал Системный Администратор, Январь 2005

Журнал Системный Администратор

Январь 2005

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке


Нити в Perl

Алексей Мичурин

Нити, называемые ещё «легковесными процессами» и управляющими потоками, – это части кода, принадлежащие одному процессу, разделяющие общее адресное пространство, но способные выполняться параллельно и асинхронно, что позволяет разделять вычисления между отдельными процессорами в многопроцессорных системах или продолжать вычисления, пока другие части программы ожидают определённых событий. В настоящей статье рассказывается об организации нитей в Perl, даётся оценка этой, пока достаточно новой и развивающейся, технологии.

threads vs fork

Все знают о системном вызове fork, который создаёт точную копию процесса. При этом новый процесс получает своё собственное адресное пространство и начинает существовать независимо от родителя. Такое ветвление процессов – широко распространённая практика в многозадачных средах, способных выполнять сразу несколько потоков команд. Но ветвление – не единственный способ воспользоваться преимуществами многопотоковости.

Другой подход – создание нитей (threads). При обычном fork-подходе одно отдельное адресное пространство обрабатывается одним потоком команд. Но согласитесь, что нет никаких принципиальных ограничений на количество потоков команд, работающих в одном адресном пространстве. Такие потоки и принято называть нитями.

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

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

В этой статье я рассказываю о средствах, имеющихся в Perl, для создания нитей. Конечно, мне не удастся охватить все возможности и тонкости программирования лёгких процессов, но я постараюсь детально остановиться на базовых вопросах и по крайней мере упомянуть средства, расширяющие возможности программиста.

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

Подписаться на весь номер

Зарегистриванные пользователи, пожалуйста следуйте по этой ссылке
oread