Я только начинаю работать над приложением торнадо, у которого есть некоторые проблемы с процессором.Время ЦП будет монотонно расти с течением времени, максимизируя ЦП на 100%.В настоящее время система разработана таким образом, чтобы не блокировать основной поток.Если ему нужно сделать что-то, что блокирует, а асинхронные драйверы недоступны, он создаст другой поток для выполнения операции блокировки.
Таким образом, у нас есть основной поток, почти полностью связанный с процессором, и куча другихпотоки, которые почти полностью связаны с IO.Из того, что я прочитал, кажется, что это идеальный способ столкнуться с проблемами с GIL.Кроме того, мое профилирование показывает, что мы тратим много времени на ожидание сигналов (что, я предполагаю, и есть то, что делает __semwait_signal
), что согласуется с эффектами, которые GIL будет иметь в моем ограниченном понимании.
Если я использую sys.setcheckinterval
для установки интервала проверки 300, рост ЦП значительно замедляется.Я пытаюсь определить, должен ли я увеличить интервал проверки, оставить его равным 300 или бояться его увеличить.В конце концов, я замечаю, что производительность процессора улучшается, но я немного обеспокоен тем, что это негативно скажется на быстродействии системы.
Конечно, правильный ответ, вероятно, заключается в том, что нам нужно переосмыслить нашу архитектуру, чтобы принятьGIL во внимание.Но это не то, что можно сделать немедленно.Итак, как мне определить соответствующий курс действий в краткосрочной перспективе?