Jump to content

Programação de sockets, treads ou fork ?


Malmen

Recommended Posts

Boas.... nestes ultimos dias tenho dado os meus primeiros passos em python e posso dizer que me estou a habituar a isto, parece-me engraçado 😄

Tenho estado a tentar desenvolver um sistema de sockets com função de mais á frente vir a suportar talvez centenas de ligações em simultaneo (quem sabe), fazer um servidor tcp foi facil, encontrei muitos tuturials sobre isto, agora um servidor tcp com suporte para varios clientes e que foi mais complicado, mas fiz como todos.... google 😞

Até que ao fim de varias horas de pesquisa encontrei um site muito engraçado que resolveu o meu problema....

Está neste link http://www.pythonbrasil.com.br/moin.cgi/SocketBasico

Este tuturial tem varios exemplos de socket, o exemplo que eu apliquei foi o ultimo, utilizando treads, mas existe outro exemplo utilizando o fork, eu gostava que me aconselhassem sobre qual o melhor a usar

Segundo o que penso, o fork vai criar um segundo processo filho por cada ligação feita (era assim que eu tinha idealizado ao inicio), enquanto o tread vai executar tudo no mesmo processo...

Qual sera a melhor forma para executar o meu codigo ?

Agradeço o tempo que prestaram a ler isto....

Boas entradas ^^

Link to comment
Share on other sites

Isso depende da lógica que o teu servidor irá processar.

Em termos de comunicação são ambas igualmente válidas. De notar (principalmente se o servidor for de ligações curtas e frequentes) que o custo de criar uma nova thread é inferior a criar um novo processo.

Também por threads tens uma maior facilidade de controlo de administração. Ou seja, consegues controlar melhor as threads existentes, por exemplo, muito facilmente podes por um número limite e se for recebido um novo pedido de ligação por parte de um cliente enviar imediatamente uma mensagem a indicar que o servidor encontra-se sobre-lotado.

Em contrapartida, nas threads o espaço de endereçamento irá ser partilhada pela todas as threads, logo terás que ter cuidado extra com concorrência e os problemas associados a esta.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

partece-me bem, mas a minha maior questão permanecia nos forks, e eu nao sabia pq, agora ja sei, segundo o que me disseram os processadores dual core apenas obtêm maior rendimento nos processos caso esse processo se possa dividir, e entao nesse caso um processador toma conta de uma ocurrencia e outro de outra, e por ai fora, em threads isso nao vai acontecer pois nao ?

Link to comment
Share on other sites

  • 1 month later...

Malmen,

sou membro da PythonBrasil e tmabém já li esse tutorial. Acredito realmente qeu fork possa ser mais interessante no seu caso mas tenho uam pergunta: você já pensou em implementar isso usando Twisted [1]? É realmente simples e bem abstraído ;-)

[1] http://twistedmatrix.com

[]s!

Tkm

P.S. se vc quiser algumas dicas sobre Twisted, me avisa ...

Link to comment
Share on other sites

  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.