URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9203
[ Назад ]

Исходное сообщение
"Использование threads, IPS::Shareable для hash"

Отправлено swindler , 01-Авг-11 10:47 
Пишу приложение в котором используется очень разветвленный сложный хэш, т.е. имеется несколько уровней вложения подхэшей: некоторые ключи хэша содержат ссылки на анонимные хэша и т.д. Этот хэш постоянно изменяется, растет, т.к. данные накапливаются.

Встала задача параллельного программирования. Сейчас думаю что выбирать: потоки или fork.
Система: Linux Debian.

Т.е. суть вопроса: при каком способе организации IPC я меньше потеряю в скорости работы с этим хэшем: при использовании threads и threads::shared ЛИБО при использовании нескольких процессов и расшаривания хэша и его подхэшей с помощью IPC::Shareable?

А скорость очень критична.

Также хотелось бы понимать, как perl использует многоядерные и многопроцессорные системы. т.е. если я создам 2 потока, они будут физически выполняться на разных ядрах/процессорах по умолчанию или надо как-то перлу об этом сказать, чтобы он их выполнял на разных ядрах/процессорах?
И, если я создам два процесса форком, как сказать перлу, чтобы он один процесс выполнял на одном ядре/процессоре, а другой на другом ядре/процессоре?


Содержание

Сообщения в этом обсуждении
"Использование threads, IPS::Shareable для hash"
Отправлено NuINu , 01-Авг-11 21:51 
>[оверквотинг удален]
> скорости работы с этим хэшем: при использовании threads и threads::shared ЛИБО
> при использовании нескольких процессов и расшаривания хэша и его подхэшей с
> помощью IPC::Shareable?
> А скорость очень критична.
> Также хотелось бы понимать, как perl использует многоядерные и многопроцессорные системы.
> т.е. если я создам 2 потока, они будут физически выполняться на
> разных ядрах/процессорах по умолчанию или надо как-то перлу об этом сказать,
> чтобы он их выполнял на разных ядрах/процессорах?
> И, если я создам два процесса форком, как сказать перлу, чтобы он
> один процесс выполнял на одном ядре/процессоре, а другой на другом ядре/процессоре?

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

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