O Apache é realmente multithreaded, pois gera um novo processo para cada nova conexão. Quanto ao tempo de vida do processo filho, ele é eliminado quando a conexão é interrompida, seja por uma desconexão ou por um tempo limite.
Eu gostaria de saber como um programa de servidor HTTP Apache atende muitos clientes conectando-se a ele na mesma porta 80? Eu sei sobre porta e soquetes. Eu fiz muita pesquisa na internet sobre isso, mas não consegui encontrar uma resposta que explica isso simplesmente. Muitas respostas levantam novas questões, como esta:
Normally, for every connecting client the server forks a child process that communicates with the client (TCP). The parent server hands off to the child process an established socket that communicates back to the client. When you send the data to a socket from your child server, the TCP stack in the OS creates a packet going back to the client and sets the "from port" to 80. If a server uses only a single child-process to serve all the sockets then the server is called single-process/threaded and if the server uses many sub-processes to serve each socket by one sub-process then the server is called multi-process/threaded server. Note that irrespective of the server's type a server can/should always uses the same initial socket to respond back (no need to allocate another server-port).
O servidor HTTP Apache é multithread ou um único thread? Meu palpite é que ele é multithreaded.
Em caso de conexão persistente, como o computador cliente entra em contato com o processo filho novamente? Existe uma tabela ou algo mantido pelo processo pai para mapear o cliente para seu processo filho? ou um novo processo filho é criado toda vez? Qual é o ciclo de vida de um processo infantil?
O Apache é realmente multithreaded, pois gera um novo processo para cada nova conexão. Quanto ao tempo de vida do processo filho, ele é eliminado quando a conexão é interrompida, seja por uma desconexão ou por um tempo limite.