Stackless Python и многоядерные?
Итак, я играю со Stackless Python, и у меня в голове всплыл вопрос, может быть, это "предполагаемые" или "общие" знания, но я не смог найти их на самом деле написанными где-либо на сайте без стеков.
Использует ли Stackless Python преимущества многоядерных процессоров? В обычном Python GIL постоянно присутствует, и для (истинного) использования нескольких ядер вам нужно использовать несколько процессов, верно ли это и для Stackless?
1 ответ
Stackless Python не использует многоядерные среды, на которых он работает.
Это распространенное заблуждение о Stackless, так как оно позволяет программисту использовать преимущества потокового программирования. Для многих эти два тесно связаны, но на самом деле это две разные вещи.
Внутренне Stackless использует планировщик циклического перебора для планирования каждого тасклета(микропотока), но ни один тасклет не может быть запущен одновременно с другим. Это означает, что если один тасклет занят, другие должны подождать, пока этот тасклет не откажется от управления. По умолчанию планировщик не останавливает тасклет и не передает процессорное время другому. Задача тасклета состоит в том, чтобы планировать себя обратно в конец очереди расписания, используя Stackless.schedule() или завершая вычисления.
Таким образом, все тасклетывыполняются последовательно, даже когда доступно несколько ядер.
Причина, по которой Stackless не имеет многоядерной поддержки, заключается в том, что это значительно упрощает потоки. И это только то, что без стеков это все о:
с официального сайта без стеков
Stackless Python - это расширенная версия языка программирования Python. Это позволяет программистам воспользоваться преимуществами программирования на основе потоков без проблем с производительностью и сложностью, связанных с традиционными потоками. Микропотоки, которые Stackless добавляет в Python, - это дешевое и легкое удобство, которое при правильном использовании может дать следующие преимущества:
- Улучшена структура программы.
- Более читаемый код.
- Увеличение производительности программиста.
Вот ссылка на дополнительную информацию о нескольких ядрах и без стеков.