
Eu trabalho em um cluster compartilhado. Já vi pessoas rodando código c paralelizado neste cluster que, quando uso top
para ver quais processos estão em execução, mostram que estão usando (por exemplo) 400% da CPU, já que estão usando quatro processadores para uma única instância de seu código.
Agora alguém está executando (o que ouvi dizer) um código Python paralelizado. Porém, em vez de top
mostrar o código Python usando 400% da CPU, ele está sendo mostrado como quatro processos diferentes, cada um usando seu próprio processador (em 100%).
Eu estou querendo saber, o Python (quando paralelizado) mostra top
tantos processos diferentes em execução (em oposição a C) ou esse código Python não está realmente sendo executado em paralelo?
Não sei se Stack Exchange seria um lugar melhor para esta questão. Desde que estou usando, top
imaginei que este lugar seria melhor. Deixe-me saber se devo movê-lo.
Responder1
O que você vê em C está usando threads, então o uso do processo é o total de todos os seus threads. Se houver 4 threads com 100% de uso da CPU cada, o processo será mostrado como 400%
O que você vê em python é quase certamente paralelismo por meio do modelo multiprocesso. Esse é um modelo destinado a superar as limitações de threading do Python. Python só pode executar um thread por vez (consulte Python Global Interpreter Lock - GIL). Para fazer melhor que isso pode-se usar o módulo multiprocesso que acaba criando processos em vez de threads, que por sua vez aparecem em ps como múltiplos processos, que então podem usar até 100% da CPU cada um, já que são (cada) únicos. rosqueado.
Aposto que se você executar ps -afeT
verá os threads do programa C, mas nenhum thread adicional para o programa python.
Responder2
A implementação de referência do Python, CPython, possui o Global Interpreter Lock (GIL), que impede a execução de código emparalelo, apenassimultaneamente. Threading é útil apenas para E/S. Você precisa de vários processos para poder executar em paralelo. O código C que você está vendo provavelmente usa threading para paralelismo.