Servidor com threads ou assíncrono? [RESOLVIDO]

1. Servidor com threads ou assíncrono? [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 04/12/2016 - 20:41h

Qual é o melhor, com threads ou assíncrono ? Eu sempre usei com threads e estou implementando um tipo de chat para melhorar em programação e caí no dilema de usar um ou outro, se alguém já usou ou usa o estilo assíncrono e puder me explicar as vantagens e/ou desvantagens eu ficarei muito grato. Na internet encontrei algumas coisas mas não me esclareceram muito.

Desde já agradeço a todos pelo espaço.


  


2. MELHOR RESPOSTA

M.
XProtoman

(usa Fedora)

Enviado em 05/12/2016 - 02:46h

Boa noite ctw6av,

Tentei como voce decidir sobre a questao, apesar de nao ter implementado nada parece que a melhor opcao e assincrono, aparentemente o Whatsapp(nao tenho certeza), Node.js e Ngix podem ser exemplos de uma abordagem sem threads(por cliente) e com relativo sucesso.

Tentei procurar algo rapidamente e encontrei isso: https://softwareengineeringdaily.com/2015/08/02/how-does-node-js-work-asynchronously-without-multith...

Provavelmente o design sem utilizar threads voce consiga algo mais rapido, eficiente e que suporte um certo volume de clientes. Tambem pode facilitar o debug.

EDIT:
Comprei a ideia de nao utilizar thread ao perceber que realmente cada thread consome recursos, seja de memoria ou processamento que sao limitados e precisam ser compartilhados, chegando a um determinado limite que sua aplicacao nao consegue atender bem aos clientes, ja uma obordagem sem threads, voce economiza recursos e permite que voce atenda mais e melhor com o que foi economizado.

Poucos clientes conectados provavelmente nao devem existir diferencas de um para outro. Quando a relacao clientes/threads comeca a consumir muitos recursos voce tem uma queda de desempenho.

Ate onde li, o Ngix aparentemente consegue superar o Apache por nao utilizar thread por cliente.

PS: Estou sem acentos porque estou usando o LiveCD do Debian para confirmar um bug no Fedora enquanto baixo o Ubuntu... Enfim, samba do crioulo doido.

____________________
“Mas nós sabemos que a razão de a maioria estar aqui, é a nossa afinidade com a desobediência!” (Morpheus)

3. Re: Servidor com threads ou assíncrono?

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 05/12/2016 - 12:28h

Obrigado pela resposta amigo, realmente cada thread consumirá simplesmente por estar esperando o recebimento e o envio de dados. Já no estilo assíncrono ele somente ira alternar entre os clientes se eles estiverem que se comunicar. Certo?

Bom! Foi isso que entendi.

EDIT: Belo link, bem esclarecedor.


______________________________________________________________________
OS: Biebian
Kernel: x86_64 3.5.2-amd64
Resolution: 1320x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB
Distro: http://biebian.sourceforge.net/


4. Re: Servidor com threads ou assíncrono? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 05/12/2016 - 16:15h

Sim, numa abordagem sem threads ele irá alternar entre clientes e realizar o que for necessário para cada um e depois passar para o próximo.

Em algum ponto a abordagem com threads vai existir concorrência entre elas, você terá mais clientes e threads que o número de processadores disponíveis para trabalhá-las, sem contar a memória necessária, seja a RAM ou a cache do processador, também será um fator limitante e degradante de desempenho.

____________________
“Mas nós sabemos que a razão de a maioria estar aqui, é a nossa afinidade com a desobediência!” (Morpheus)


5. Re: Servidor com threads ou assíncrono? [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 05/12/2016 - 16:20h

Cara obrigado pelo esclarecimento, já até bolei algo por aqui e realmente é bem mais prático e ainda mais usando callbacks. O servidor em sí para funcionar ficou com menos de 58 linhas usando o framework asyncio do python3.



______________________________________________________________________
OS: Biebian
Kernel: x86_64 3.5.2-amd64
Resolution: 1320x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB
Distro: http://biebian.sourceforge.net/






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts