Многопроцессорность: как общие типы (RawArray, RawValue) работают внутри, как они соотносятся с SharedMemory и связанныеPython

Программы на Python
Ответить
Anonymous
 Многопроцессорность: как общие типы (RawArray, RawValue) работают внутри, как они соотносятся с SharedMemory и связанные

Сообщение Anonymous »

Я читал о параллелизме и общей памяти в стиле SysV и POSIX в целом, а также о пакете многопроцессорной обработки Python в частности. Теперь у меня есть несколько вопросов, по которым мой Google-фу пока ни к чему не привел:
Q1 Насколько я понял из этой проблемы в системе отслеживания ошибок Python, недавно представленный multiprocessing.shared_memory.SharedMemory использует именованную разделяемую память POSIX. Однако когда дело доходит до таких типов, как RawArray и RawValue, определенных в multiprocessing.sharedctypes, документация Python оставляет желать лучшего. Как они реализованы внутри?
Q2 Является ли единственное практическое различие между, скажем, RawArray('B') и экземпляром multiprocessing.shared_memory.SharedMemory в том, что последний имеет имя и также доступен из несвязанных (возможно, не Python) процессов? Сопоставима ли их производительность?
Q3 Как именно в Python реализованы многопроцессорные блокировки? Разве им также не нужно использовать какую-то общую память? В документации говорится:

Примечание
Некоторые из функций этого пакета требуют функционирующей реализации общего
семафора в операционной системе хоста. Без него
модуль multiprocessing.synchronize будет отключен, а попытки
импортировать его приведут к ошибке ImportError. См. bpo-3770 для
дополнительной информации.

(Обратите внимание, что multiprocessing.Lock на самом деле происходит от multiprocessing.synchronize.Lock.) Теперь, согласно связанной проблеме bpo-3770, Lock использует shm_open() из libc, который создает именованный семафор. Похоже ли это на то, как работает SharedMemory?
Обновление: Согласно исходному коду – в частности, эти строки: Ссылка 1, ссылка 2 (спасибо, bnaecker!) – в системах, отличных от Windows, RawArray и RawValue просто реализованы с использованием временного файла, который (по крайней мере, в Linux) размещается в каталоге, не поддерживаемом хранилищем, а именно /dev/shm. Тогда это кажется очень похожим на то, как работает общее хранилище POSIX, то есть SharedMemory. Итак, я думаю, мне следует заменить свой вопрос Q1 следующим: Почему вообще была введена функция Shared_memory, если RawArray настолько похож? В вышеупомянутой проблеме с самого начала упоминаются причины производительности, но я не понимаю, откуда такая разница в производительности (по крайней мере, в Linux)?

Подробнее здесь: https://stackoverflow.com/questions/639 ... ally-how-d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»