[Python] web: sync vs. async

Giampaolo Rodolà g.rodola a gmail.com
Mar 6 Dic 2011 20:45:41 CET


Il 06 dicembre 2011 19:38, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
>> Riusciresti a darmi qualche dettaglio in più?
>
> Per il "Thundering herd problem", trovi una breve descrizione su Wikipedia:
> http://en.wikipedia.org/wiki/Thundering_herd_problem
>
> Vedi anche:
> http://www.citi.umich.edu/projects/linux-scalability/reports/accept.html
>
>
> Il problema è menzionato anche nel libro "UNIX Network Programming".
> In particolare, oltre al problema di prestazioni che per pochi processi
> non dovrebbe essere preoccupante, c'è un altro problema con quello che
> fai: chiamare accept sullo stesso file descriptor ereditato potrebbe
> **non** funzionare su alcuni sistemi; in questi casi hai bosogno di
> serializzare la chiamata con un lock o mutex (che è quello che,
> opzionalmente, fa Nginx [1]).
>
> Ti consiglio di fare dei test e di documentarti meglio (io non so
> nemmeno cosa è cambiato in versioni recenti di Linux).

Grazie, non ero minimamente a conoscenza del problema.
Leggerò partendo dagli spunti che mi hai dato.
Per la cronaca, tornado dovrebbe soffrire dello stesso "problema",
solo che anzichè utilizzare multiprocessing fa il tutto a mano con
fork(), che ipotizzo sia concettualmente identico:
https://github.com/facebook/tornado/blob/master/tornado/process.py#L64
https://github.com/facebook/tornado/blob/master/tornado/netutil.py#L151


--- Giampaolo
http://code.google.com/p/pyftpdlib/
http://code.google.com/p/psutil/


Maggiori informazioni sulla lista Python