Пишу иксовое приложение на python-xlib. Использовал тамошнюю функцию, которая блокировалась, если клиенту не поступает событий. Все было отлично, во время ожидания процесс был внизу топа.
В связи с проблемами вызова иксовых функций из другого потока, решил сделать миниатюрную систему сигналов, посредством создания пайпа, в который другие нити пишут, а основной поток читает и вызывает обработчики. Но чтобы всё работало, пришлось использовать селект, который слушает события на соединении с икс-сервером и на пайпе.
После этого стало кушать процессор. В strace вижу блокировку на select, а отъедает процент. По прикидкам, тормознее стало на порядок, так как раньше cputime был вровень с bmpanel, а сейчас в десять раз больше.
Вопросы:
1) Просто select тормозит от рождения?
2) Или его реализация в питоне?
3) Использование poll, epoll может решить проблему? Или они принципиально ничем от селекта не отличаются?