
Eu estava lendo sobre como os threads do usuário são mapeados para threads do kernel emWikipédia. A partir deste artigo, entendo que o FreeBSD usa o 1:1 (threading em nível de kernel).
Assim, cada thread de usuário criado pelo aplicativo é mapeado para um thread do Kernel. Se eu presumir que estou construindo um servidor web que irá lidar com cada nova solicitação em um thread e estou executando no FreeBSD, aumentar o número de núcleos melhorará o desempenho geral do aplicativo?
eu li essa perguntaNúcleos de CPU: Quanto mais, melhor?, mas quero que o escopo das respostas seja influenciado especificamente pelo mapeamento 1:1 entre os threads do usuário e do kernel.
Responder1
A resposta curta é sim.
A resposta longa é... ter mais núcleo de CPU significa ter mais poder de processamento. No caso de uma aplicação web PHP/Ruby/Python/etc., significa mais recursos para lidar com conexões simultâneas. Ter mais núcleos realmente faz a diferença no caso de um aplicativo com muita carga.
Minha opinião pessoal é que no caso de escolher entre mais poder de processamento e mais RAM, opto por mais RAM na maioria dos casos. Com RAM, você pode reduzir o gargalo de E/S de disco.
Usando sistemas de caches comoPHPAPC,Verniz, eAjuste do MySQL(cache de tabela, cache de consulta, etc...), você pode melhorar muito o desempenho do seu site sem precisar de mais energia da CPU para gerar conteúdo.
Se o seu site puder ser armazenado em cache, faça esta escolha. Apenas aumentar o número de núcleos da CPU é uma escolha perdida a longo prazo.
Responder2
Sim.
O software de servidor web moderno usa um processo ou thread separado para cada computador conectado ao servidor. Além disso, softwares de back-end como MySQL ou PHP também são executados em processos ou threads separados para cada usuário que precisa atender, portanto, ter mais núcleos sempre ajuda.
É claro que em ambientes mais intensivos, o desempenho do disco, a memória ou a largura de banda da rede podem acabar se tornando gargalos. Mais memória permite mais cache de leitura, o que reduzirá os acessos ao armazenamento lento em disco. Conforme sugerido por Biapy, se você estiver lidando com muitas solicitações por segundo, deverá procurar um software de cache especializado, como o Varnish, que reduzirá bastante a carga do sistema.
Responder3
Como sempre, a resposta será que depende.
Por exemplo, onginxservidor webfunciona muito bem, mesmo que não use threads. Em vez disso, ele usa uma arquitetura orientada a eventos. Ele pode usar e usa vários processos de trabalho, portanto pode fazer uso de vários núcleos.
Como você pode ver nas medições de desempenho vinculadas, o servidor web Apache encadeado gera mais threads e usa mais memória se a quantidade de conexões simultâneas aumentar. A quantidade de memória usada pelo nginx permanece bastante constante. E na quantidade de solicitações atendidas por segundo, o nginx supera o apache por uma ampla margem.
Portanto, os threads nem sempre são a melhor solução.
O desempenho também depende de onde residem seus dados. Se estiver estacionado em um disco rígido, o acesso será lento em comparação com quando estiver na RAM, que por sua vez é muito mais lento que o cache do processador. Se você quiser acelerar seu servidor web, considere usar um acelerador comoverniz. Considere lerEste artigopelo principal autor do verniz sobre desempenho em serviços web. A mensagem aqui é que você deveusaros mecanismos de chaching integrados do sistema operacional e que você não deve tentar fazer o mesmo trabalho sozinho.