Clone de processo (forking)
Last updated
Last updated
A syscall **clone** sendo chamada sem argumentos, permite criar um outro processo filho exatamente igual, mas como processos são isolados, então todos os dados e programa seriam copiados para outra área da memória. Desta forma, poderíamos ter várias réplicas (filhos) do programa (pai) de modo a atender a uma demanda de acessos.
Esta técnica é chamada também de forking de processos.
Entretanto, forking pode fazer com que o uso de memória do computador atinja o limite máximo mais depressa, pois cada fork (filho) vai ter uma cópia exata do processo original (pai).
Forking é uma técnica bastante utilizada, principalmente em cenários de escalabilidade que demandam o cenário que foi trazido de aumento do número de requisições no sistema.
Eu disse que não ia citar a palavra escalabilidade mas é natural falar de escalabilidade quando estamos falando de concorrência. Por isso não vejo este termo como algo "complexo". Uma vez entendendo sobre concorrência de verdade, fica mais fácil resolver problemas de escalabilidade
E sim, eu posso futuramente escrever um outro guia falando só sobre escalabilidade de sistemas, mas vai ser inevitável falar de concorrência. Bem, você entendeu...
Okay, e se eu te disser que ao invés de clonar todos os dados do programa (processo), eu quiser clonar apenas uma parte dele, fazendo com que esta parte seja mais leve e tenha acesso compartilhado com a memória do processo principal?
O sistema operacional oferece este recurso?
Bem, para nossa sorte sim. A mesma chamada clone, se receber alguns argumentos específicos, faz exatamente isso que queremos: um "processo filho" mais leve que compartilha a memória do processo principal com outros processos "irmãos".
A este processo "leve" damos o nome de thread.
Não precisa se assustar e apegar a detalhes técnicos que vêm a seguir, pois quero apenas elucidar estas estruturas primitivas no sistema operacional