Пишу приложение в котором используется очень разветвленный сложный хэш, т.е. имеется несколько уровней вложения подхэшей: некоторые ключи хэша содержат ссылки на анонимные хэша и т.д. Этот хэш постоянно изменяется, растет, т.к. данные накапливаются.Встала задача параллельного программирования. Сейчас думаю что выбирать: потоки или fork.
Система: Linux Debian.Т.е. суть вопроса: при каком способе организации IPC я меньше потеряю в скорости работы с этим хэшем: при использовании threads и threads::shared ЛИБО при использовании нескольких процессов и расшаривания хэша и его подхэшей с помощью IPC::Shareable?
А скорость очень критична.
Также хотелось бы понимать, как perl использует многоядерные и многопроцессорные системы. т.е. если я создам 2 потока, они будут физически выполняться на разных ядрах/процессорах по умолчанию или надо как-то перлу об этом сказать, чтобы он их выполнял на разных ядрах/процессорах?
И, если я создам два процесса форком, как сказать перлу, чтобы он один процесс выполнял на одном ядре/процессоре, а другой на другом ядре/процессоре?
>[оверквотинг удален]
> скорости работы с этим хэшем: при использовании threads и threads::shared ЛИБО
> при использовании нескольких процессов и расшаривания хэша и его подхэшей с
> помощью IPC::Shareable?
> А скорость очень критична.
> Также хотелось бы понимать, как perl использует многоядерные и многопроцессорные системы.
> т.е. если я создам 2 потока, они будут физически выполняться на
> разных ядрах/процессорах по умолчанию или надо как-то перлу об этом сказать,
> чтобы он их выполнял на разных ядрах/процессорах?
> И, если я создам два процесса форком, как сказать перлу, чтобы он
> один процесс выполнял на одном ядре/процессоре, а другой на другом ядре/процессоре?планирование выполнения задач не дело перла, работает ядро, а ядру все равно, что там выполняется перл или нет. есть процесс пожалуйста на выполнение. Нити от процессов в линуксе с точки зрения планирования выполнения не отличаются.
что касается что скоростнее нити или процессы, теоретически нити скоростнее, тк область данных у них едина, и нет необходимости в межпроцессной переброски данных. Но тут интерперетатор, он может накладывать свои ограничения. Так что посоветую просто написать два разных варианта и их проверить. А в идеале ваша задача не должна знать как осущестлвяется IPC