domingo, 17 de janeiro de 2016

Hardcore Devel #47 - Pipes & Forks

Eu gostei tanto desse nome, que acho até que dá pra abrir uma empresa com ele.


Calma que esse não é o logo.

Então, já cobrimos aqui o que é um fork, e o que é um pipe, mas pra que afinal servem essas coisas? Pra que você quer um encanador que use garfos, ou por que diabos você iria querer garfos no seu encanamento? Isso não faz muito sentido, pelo menos não se você pensar apenas dessa forma e não tiver lido isso e isso.

O que eu quero frisar aqui é que o Fork por si só é meio inutil. Pra que que você quer diversos processos se eles não conversam entre si? A menos que todos eles estejam fazendo tarefas diferentes, isso não vale de nada, e mesmo que estejam, vamos combinar que processos que se falam são muito mais interessantes do que quando eles estão calados.

E como eles se falam!? Bom, você tem duas opções: Ou eles compartilham memória, ou eles usam Arquivos. Por arquivos podemos entender "Pipes".

Só que tem existem alguns problemas. Sabe quando você quer fazer duas casas com um encanamento compartilhado? Obviamente não porque você não é nem um pedreiro, nem engenheiro, nem encanador, ou talvez até seja, mas provavelmente nunca se deparou com esse problema. Essas coisas absurdas só acontecem na computação. De qualquer forma, você tem a ordem correta para fazer as coisas, Faça o encanamento, depois faça as casas.

Se você tentar juntar o encanamento depois que ambas as casas estiverem de pé, pode ter certeza que você vai ter muitos problemas pelo caminho, mas se você fizer tudo direitinho, você vai ter um encanamento conectado fazendo maravilhas.

E como estamos falando de processos que se falam, você vai poder fazer aquilo que os programadores mais temem: Comunicação Interprocessual. IPC, como a gente gosta de chamar. E aí que o bicho pega, pois se o encanamento não estiver bem feito, os canos podem congestionar ou explodir, ou uma descarga ficar pra sempre ativada.

Não existe uma receita de bolo muito correta para resolver esses problemas. A melhor idéia que você pode ter quando estiver trabalhando com diversos processos é: Crie um gerente deles. Dessa forma, você vai poder enviar os sinais de interrupção, para as outras threads, e aí o seu trabalho vai ser garantir que o gerente funcione.

Não é a abordagem mais prática, mas alguma burocracia é necessária as vezes, mesmo quando você está lidando com canos e garfos.

Nenhum comentário:

Postar um comentário