Я читал о параллелизме и общей памяти в стиле 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
Многопроцессорность: как общие типы (RawArray, RawValue) работают внутри, как они соотносятся с SharedMemory и связанные ⇐ Python
Программы на Python
1767830447
Anonymous
Я читал о параллелизме и общей памяти в стиле SysV и POSIX в целом, а также о пакете многопроцессорной обработки Python в частности. Теперь у меня есть несколько вопросов, по которым мой Google-фу пока ни к чему не привел:
[b]Q1[/b] Насколько я понял из этой проблемы в системе отслеживания ошибок Python, недавно представленный multiprocessing.shared_memory.SharedMemory использует именованную разделяемую память POSIX. Однако когда дело доходит до таких типов, как RawArray и RawValue, определенных в multiprocessing.sharedctypes, документация Python оставляет желать лучшего. Как они реализованы внутри?
[b]Q2[/b] Является ли единственное практическое различие между, скажем, RawArray('B') и экземпляром multiprocessing.shared_memory.SharedMemory в том, что последний имеет имя и также доступен из несвязанных (возможно, не Python) процессов? Сопоставима ли их производительность?
[b]Q3[/b] Как именно в Python реализованы многопроцессорные блокировки? Разве им также не нужно использовать какую-то общую память? В документации говорится:
Примечание
Некоторые из функций этого пакета требуют функционирующей реализации общего
семафора в операционной системе хоста. Без него
модуль multiprocessing.synchronize будет отключен, а попытки
импортировать его приведут к ошибке ImportError. См. bpo-3770 для
дополнительной информации.
(Обратите внимание, что multiprocessing.Lock на самом деле происходит от multiprocessing.synchronize.Lock.) Теперь, согласно связанной проблеме bpo-3770, Lock использует shm_open() из libc, который создает именованный семафор. Похоже ли это на то, как работает SharedMemory?
[b]Обновление:[/b] Согласно исходному коду – в частности, эти строки: Ссылка 1, ссылка 2 (спасибо, bnaecker!) – в системах, отличных от Windows, RawArray и RawValue просто реализованы с использованием временного файла, который (по крайней мере, в Linux) размещается в каталоге, не поддерживаемом хранилищем, а именно /dev/shm. Тогда это кажется очень похожим на то, как работает общее хранилище POSIX, то есть SharedMemory. Итак, я думаю, мне следует заменить свой вопрос Q1 следующим: Почему вообще была введена функция Shared_memory, если RawArray настолько похож? В вышеупомянутой проблеме с самого начала упоминаются причины производительности, но я не понимаю, откуда такая разница в производительности (по крайней мере, в Linux)?
Подробнее здесь: [url]https://stackoverflow.com/questions/63943570/multiprocessing-how-do-sharedctypes-rawarray-rawvalue-work-internally-how-d[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия