Существует больше проблем с этим сценарием. Бесполезное использование cat
один из примеров. Если мы принимаем первое участие сценария, мы, возможно, записали это как
while read -r line; do echo "$line"; done < example.txt
Взятие if.. else
часть, из чего использование awk {print $0}'
if [[ "$H_OR_T" == 'M$9001' ]]; then
....
....
fi
В этом случае '9 001 M$' взят буквально.
То, что вы видите в C, это использование потоков, поэтому использование процесса - это сумма всех его потоков. Если будет 4 потока со 100% использованием процессора каждый, то процесс покажет как 400%
То, что вы видите на питоне, это почти наверняка параллелизм через многопроцессную модель. Это модель, предназначенная для преодоления ограничений Python по многопоточности. Python может выполнять сам себя только по одному потоку за раз (см. Python Global Interpreter Lock - GIL). Для того чтобы сделать лучше, можно использовать многопроцессорный модуль, который в конечном итоге создаёт процессы, а не потоки, которые, в свою очередь, показывают в ps как многопроцессорные процессы, которые затем могут использовать до 100% CPU каждый, так как они (каждый) однопоточны.
Бьюсь об заклад, что при запуске ps -afeT
вы увидите потоки программы на языке C, но не увидите дополнительных потоков для программы на языке python.
Ссылочная реализация Python, CPython, имеет глобальную блокировку интерпретатора (Global Interpreter Lock, GIL), которая не позволяет ему выполнять код в parallel, только concurrently. Поток полезен только для ввода/вывода. Для параллельного выполнения необходимо несколько процессов. Скорее всего, рассматриваемый код на языке Си вместо этого использует многопоточность для параллельности.
.