Números de thread do computador

290 views
Skip to first unread message

Mauricio José

unread,
Aug 31, 2012, 2:42:16 PM8/31/12
to pyth...@googlegroups.com

Não é novidade pra ninguém que programação paralela, quando possível, é a melhor opção. Porém, o número de threads que a aplicação pode criar tem que ser controlada pelo programador, já que o custo de gerenciamento destas threads pode degradar o desempenho da aplicação. O ideal é que o número de threads lançados pela aplicação não seja superior ao número de threads suportadas pelo computador, eu gostaria de saber se tem como eu saber qual o número de threads que o computador suporta, uma vez que pode ser diferente do número de processadores, que pode ser obtido através do código abaixo:

import multiprocessing

num_processadores = multiprocessing.cpu_count()



--
att,
Maurício José


"O próximo grande salto evolutivo da humanidade será a descoberta de que cooperar é melhor que competir"
Prof. Pietro Ubaldi

Laerte M. Rodrigues

unread,
Aug 31, 2012, 2:48:43 PM8/31/12
to pyth...@googlegroups.com
ola mauricio,

tecnicamente, a quantidade máxima de threads suportadas irá depender do espaço da memória, já que cada uma terá uma nova alocação até estourar (out of memory)

--
 
 
 



--
Grato,

Laerte Mateus Rodrigues

Mauricio José

unread,
Aug 31, 2012, 6:30:16 PM8/31/12
to pyth...@googlegroups.com

Realmente Laerte, é possivel criar threads até estourar os limites físicos do computador. Porém, quando o número de threads é muito grande, gerenciar estas threads fica caro para o sistema operacional. Por este motivo eu acho prudente limitar o número de threads das aplicações, ao número de núcleos do computador.
Claro que isto so tem impacto em threads cpu bound.

--
 
 
 

Rafael Alencar

unread,
Aug 31, 2012, 6:53:45 PM8/31/12
to pyth...@googlegroups.com
Lembrando que no CPython as threads são mais úteis para operações I/O bound, já que devido ao GIL [1], somente uma thread vai executar em um determinado instante de tempo, mesmo em computadores com múltiplos núcleos.

Para situações CPU bound o ideal é usar o módulo multiprocessing [2], que possui uma API semelhante à do módulo threading, e permite o uso concorrente de múltiplos processadores.




Abraço!

Rafael Alencar

Mauricio José

unread,
Aug 31, 2012, 10:43:56 PM8/31/12
to pyth...@googlegroups.com
Rafael,

Olhe o comportamento dos dois programas.

Sem thread

Inline image 2



Com duas Threads

Inline image 1


No exemplo com duas threads há concorrência entre os processadores, o engraçado, é que pensei que dois núcleos ficariam com 100% e os outro dois ociosos (Dalvik se comporta assim), vai aí um indício de que o python gerencia melhor os recursos do computador.



2012/8/31 Rafael Alencar <raf...@gmail.com>

--
 
 
 
multithreading.png
nothreading.png

Rafael Alencar

unread,
Aug 31, 2012, 10:56:23 PM8/31/12
to pyth...@googlegroups.com
Seu programa está usando mais de um processador, mas por causa do global interpreter lock eles nunca executarão o código Python em um mesmo instante de tempo (ou seja, na prática não ocorre paralelismo).

Antonio Ribeiro

unread,
Sep 4, 2012, 3:29:36 AM9/4/12
to pyth...@googlegroups.com
Olá Marurício,

Há uns dois ou três anos atrás eu escrei uma série de posts sobre paralelismo (usando memória compartilhada). Se for útil dê uma lida aqui:



2012/9/1 Rafael Alencar <raf...@gmail.com>
--
 
 
 



--
Atenciosamente,
Antonio Ribeiro

Skype: alvesjnr

Antonio Ribeiro

unread,
Sep 4, 2012, 3:30:06 AM9/4/12
to pyth...@googlegroups.com
P.s. Nào é em Python, mas abrange o conceito básico de paralelismo em memória compartilhada


2012/9/4 Antonio Ribeiro <alvesjuni...@gmail.com>

Mauricio José

unread,
Sep 4, 2012, 1:01:44 PM9/4/12
to pyth...@googlegroups.com
Antônio, muito bons seus textos, esclareceu bastante coisa.
Eu realmente acreditava conseguir paralelismo real utilizando threads.
Não pensei que seria necessário a utilização de alguma biblioteca hadcore pra tratar isto.

Vlw galera!

2012/9/4 Antonio Ribeiro <alvesjuni...@gmail.com>
--
 
 
 

Antonio Ribeiro

unread,
Sep 5, 2012, 5:58:24 AM9/5/12
to pyth...@googlegroups.com
Duas considerações:

1 - Esse meu texto é de 2008/9 (republicado em 2010), quando eu estava começando a usar programação paralela. O texto está bem superficial, porque eu não dominava tanto o assunto.
2 - Se você quer aprender mesmom programação paralela (ou distribuída) eu recomendo esse livro aqui: http://heather.cs.ucdavis.edu/~matloff/158/PLN/ParProcBook.pdf como leitura introdutória
2 - Eu não recomendaria ninguém a aprender programação paralela começando pelo Python. Basicamente porque: eu não gosto do jeito que python trata paralelismo.
2 - Na faculdade de engenharia você desaprende a contar.

2012/9/4 Mauricio José <badri...@gmail.com>
Reply all
Reply to author
Forward
0 new messages