Comentários do Blog

  1. Avatar de Magnun
    Mandou muito bem cara!!! Parabéns!
  2. Avatar de pedrovigia
    execelente artigo, vale ouro mesmo ....
  3. Avatar de Magnun
    Muito bom cara! Script muito bem bolado... Parabéns!!
  4. Avatar de Magnun
    Hum.... Mais um pra minha lista de compras! Obrigado e Feliz Natal!!!
  5. Avatar de PEdroArthurJEdi
    Sim, as trocas de contexto ocorrem. Porém, alternar entre threads é bem menos custoso que alternar entre processos. O livro Linux Kernel Development, do Robert Love, explica muito bem esse tópico.
  6. Avatar de Magnun
    No caso da aplicação que eu construí (servidor de conexões para gerência) não havia comunicação entre os processos. Se não me engano, a troca de contexto ocorre com thread também pelo conceito de 'multiplexação' do processador.

    CopyOnWrite, interessante isso... Vou dar uma pesquisada!

    Cara, recomendo muito o vídeo, mesmo ele tendo 61 min... O título diz tudo 'Mindblowing Python GIL'.
  7. Avatar de PEdroArthurJEdi
    Não é isso. O overhead que me refiro são as constantes trocas de contextos ocasionadas pelo uso de pipes, sockets e outros mecanismos de comunicação entre processos. Ou seja, ao trabalho dispendioso que o SO tem de substituir a entrada da tabela de processos, memória paginada e outros recursos necessários.

    Quanto a essa questão do fork, o Linux tabalho com o CopyOnWrite. Ele só realiza a cópia da memória do processo pai para o filho caso um desses tente sobreescrever uma área comum. Por exemplo, uma variável que armazene um arquivo de configuração. Ao ser chamado, o fork não faz a cópia dessa variável. Porém, caso o processo pai ou filho tente modifica-lo, pela regras de isolamento entre processo, a área de memória deixa de ser compartilhada e são feitas cópias específicas da variável para os processos envolvidos.

    Rapaz, vou dar uma lida nessas referências que você me passou. Como eu sempre rodei diversas aplicações multithread simultaneamente, em Python e C, nunca havia notado pois os gráficos de utilização do processador mostram todos os núcleos ocupados. Então, talvez o fork ou acoplação fraca seja a melhor solução para aplicações escritas em Python.

    Vou pesquisar sobre o assunto! Obrigado pelas referências.
    Atualizado 23-12-2009 em 13:26 por PEdroArthurJEdi (Erros de grafia)
  8. Avatar de Magnun
    Cara, usei fork para criar um servidor de conexões remotas. Eu achei que era o melhor modelo. Na época os ambientes multiprocessados não estavam "disponíveis" a todos então não analisei dessa ótica.

    Hoje em dia eu também não sei se faria muita diferença pois, com essa 'fartura' de recursos computacionais, talvez fosse mais interessante pensar em Computação Distribuída através de clusters. Isso dependendo do seu objetivo, claro!!

    Quanto ao overhead, você se refere à cópia de todas as variáveis que o fork faz?? Se for isso, existe também o vfork que cria somente referências das variáveis do processo pai.

    Agora a parte triste disso tudo... O python tem uma série de restrições ao rodar em computadores multicore por causa do GIL (Global Interpreter Lock). O GIL impede que o mesmo bytecode seja rodado simultaneamente por mais de um processo. Resultado disso, temos uma computação serial, nada de paralelo.

    Mas quem sou eu para explicar isso ... Vou deixar isso para quem entende: esse texto: Python's GIL is EVIL | GroupLens Research e esse vídeo: Mindblowing Python GIL . Ambos sobre Python & GIL.
  9. Avatar de PEdroArthurJEdi
    @code

    Como os princípios básicos de multithreading estão todos nesse artigo, não precisarei ralar muito para criar o de Python e Java, apesar de ambas as linguagens possuírem um modelo de threads bem diferente do POSIX.

    @Magnum

    Concordo em tudo que você falou. Mas não gosto muito de 'forks'. Na minha opnião, adiciona muito overhead que, a menos que se tenha um motivo bastante específico, é desnecessário. Porém, acho o assunto bastante interessante e vou fazer um texto em breve. E isso já dá para um terceiro texto e o levante de uma questão bastante polêmica: o que é melhor para aplicações paralelas em ambientes multiprocessadores, multi-threading ou IPC?

    ps: Confesso que já tive alguns "motivos bastantes específicos" :-) Ou seja, se usar o fork for a alternativa mais adequada, uso sem pestanejar!
  10. Avatar de Magnun
    Cara, isso me lembra muito quando ralei pra usar pthreads no meu projeto de graduação!!! Você podia ter postado isso a 2 anos atrás, teria me poupado muito trabalho !!!!!

    Posso sugerir outro post?? Sub-processos com o fork. Sub processos é outro assunto que embola a cabeça dos programadores no início mas possui funcionalidades excepcionais. Sem contar que os conceitos de semaforos e pipes (para comunicação) são essenciais para algumas aplicações...
Página 2 de 8 PrimeiroPrimeiro 1234567 ... ÚltimoÚltimo