Я написал программу Python, в которой используются классы threading.Thread
. Запускается около 25 потоков. Он работает на Raspberry Pi 4 (4 ядра).
Я думал, что при использовании потоков будет запущен только процесс 1 Python (из-за GIL). Похоже, запущено 35 процессов.
top
показывает, что python3 использует 140% ЦП. (отображается только 1 процесс)
htop
показывает много python3 процессов. Они также составляют около 140%.
pstree -p
показывает следующее (только часть python):
├─python3(28401)─┬─{python3}(28402)
│ ├─{python3}(28403)
│ ├─{python3}(28404)
│ ├─{python3}(28405)
│ ├─{python3}(28406)
│ ├─{python3}(28407)
│ ├─{python3}(28408)
│ ├─{python3}(28409)
│ ├─{python3}(28410)
│ ├─{python3}(28412)
│ ├─{python3}(28413)
│ ├─{python3}(28414)
│ ├─{python3}(28415)
│ ├─{python3}(28416)
│ ├─{python3}(28417)
│ ├─{python3}(28418)
│ ├─{python3}(28419)
│ ├─{python3}(28421)
│ ├─{python3}(28422)
│ ├─{python3}(28423)
│ ├─{python3}(28424)
│ ├─{python3}(28425)
│ ├─{python3}(28426)
│ ├─{python3}(28427)
│ ├─{python3}(28428)
│ ├─{python3}(28429)
│ ├─{python3}(28430)
│ ├─{python3}(28432)
│ ├─{python3}(28433)
│ ├─{python3}(28434)
│ ├─{python3}(28435)
│ ├─{python3}(28437)
│ ├─{python3}(28438)
│ ├─{python3}(28444)
│ └─{python3}(28445)
Мой вопрос, как это объяснить? Действительно ли много процессов выполняется параллельно, что означает, что можно будет использовать до 300-400% ЦП? Или это какие-то артефакты, связанные с вводом-выводом?