[Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

enrico franchi enrico.franchi a gmail.com
Dom 12 Lug 2015 19:26:44 CEST


2015-07-11 11:40 GMT+01:00 Davide Muzzarelli <d.muzzarelli a dav-muz.net>:

> Ogni gorutine (simile ai thread) occupa 4kb. In 350MB di RAM puoi gestire
> circa 90.000 connessioni aperte simultaneamente.


Come dire... occhio pero'. Tutte le volte nella storia dell'informatica che
qualcuno ha convinto qualcun altro che qualcosa fosse essenzialmente
gratuito, ci sono stati tanti ingegneri a correrre la notte e tanti sistemi
riscritti.

Tipo... 90.000 connessioni aperte simultaneamente? Ma dai, diciamo proprio
di no. Non e' che non *puoi* farlo. E' che e' proprio una cattiva idea
farlo *a meno che non devi proprio farlo*. Tipicamente tutte le volte che
assumi che qualcosa sia gratuito e illimitato, prima o poi qualcuno ti
fara' scoprire che non e' cosi' (corollario: di solito questa cosa accade
in un'altra time-zone, quando uno avrebbe preferito dormire invece di
scoprire nuove cose).

Vuoi tenere 90K connessioni aperte? Metti conto che: TCP ha bisogno di
bookeeping nel kernel. 90K descrittori sono proprio tanti. A questo punto
devi tenere traccia di quali connessioni sono buone e quali non sono buone
(cosa non banale... TCP Keepalive offre qualcosa di diverso e farlo a mano
e' noioso... HTTP keepalive e' una cosa diversa ancora, ma e' piuttosto
delicata e spesso si spacca... in pratica non e' un caso come funzionano i
vari pool di connessioni http -- che per dire, Go stesso offre senza dirlo
in modo troppo esplicito). In generale e' davvero molto piu' semplice usare
logiche di pool rispetto che fare 90.000 goroutine. Tipicamente se uno fa
ste cose a cuor leggero la prima cosa che scopre e' che ha un problema con
il garbage collector, per dire.


> Puoi usare tutte le CPU a disposizione fin da subito senza scrivere
codice aggiuntivo.


Ora... il codice aggiuntivo e' piccolo, ma di per se Go 1.4 se non gli dici
altrimenti usa *una* CPU.

-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150712/f6e826a0/attachment.html>


Maggiori informazioni sulla lista Python