Não foi possível carregar o Diqus. Se você é o moderador, por favor veja o nosso guia de problemas.

Alisson Bruno Santos • 10 anos atrás

Falar Akita, blz?!
Cara legal as dicas que vc deu, só fiquei com algumas dúvidas?!
Como funciona esse fork? Ele pega um processo e "divide em outros processos" e faz o processamento em cores diferente na maquina? Eles são tão eficientes quanto as threads reais?

AkitaOnRails • 10 anos atrás

Em Unix existe a função "fork" que pega um processo que está rodando e sobe um processo-filho que é cópia do primeiro. Ele continua no segundo processo exatamente de onde o primeiro chamou o fork e com o mesmo estado em memória. Pra isso o novo processo precisaria de uma cópia da memória do primeiro, mas por causa do conceito de "copy on write", ele não precisa duplicar a memória o que torna tudo eficiente.

E processos em paralelo são diferente de threads nativas. Threads rodam dentro de um processo. No caso de linguagens como Ruby, Javascript, Python, etc mesmo tendo suporte a multithreading com threads nativas cada processo só executa uma thread nativa de cada vez (menos nos casos de I/O bloqueaste como expliquei). Nesse caso para usar todas as cores do seu CPU, precisa haver multi-processos.

O caso é diferente quando falamos de JRuby, claro, que consegue rodar sem o bloqueio de GIL e portanto um único processo consegue ter multi threads paralelas em todos os cores.