• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Malmen

Programação de sockets, treads ou fork ?

5 mensagens neste tópico

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 :D

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 ^^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usa threads. Processos não partilham memória com os o processo pai. Suponho que existam recursos partilhados entre os vários clientes.

Depois threads são mais maleáveis e fáceis de debugar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora