RSS Планета Python

Джампаоло Родола: От Python 3.3 до наших дней: завершение 15 лет опроса подпроцессов

Ожидание завершения процессов в системах POSIX с использованием метода опроса с загруженным циклом оказалось неэффективным. Этот метод постоянно пробуждает процессор для проверки состояния процесса, увеличивая циклы потери и увеличивая задержку. В статье рассматривается ожидание, основанное на событиях, как более эффективный вариант. Системы Linux теперь поддерживают 'pidfd_open' начиная с ядра 5.3, что позволяет эффективно отслеживать PID процесса через 'select', 'poll' или 'epoll'. Это устраняет зацикленность занятости, поскольку ядро пробуждает процесс только после выхода целевой цели или тайм-аута. Системы BSD и macOS используют системный вызов 'kqueue' для аналогичного мониторинга процессов, основанных на событиях. Windows уже использует эффективный метод, управляемый событиями, с помощью 'WaitForSingleObject'. Новые реализации плавно возвращаются к циклу занятости, если механизмы, управляемые событиями, не выходят из строя. Измерения показывают значительное сокращение переключений контекста при использовании событийно-ориентированного подхода. И 'poll', и 'kqueue' переводят процесс в эффективное спящее состояние, не потребляя CPU. Это улучшение, изначально реализованное в 'psutil', теперь внесено в модуль стандартной библиотеки Python — 'подпроцесс'. Это знаменует значительное возвращение улучшения от «psutil» к стандартной библиотеке более чем через 15 лет.
favicon
gmpy.dev
Giampaolo Rodola: From Python 3.3 to today: ending 15 years of subprocess polling
Create attached notes ...