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

Davide Muzzarelli d.muzzarelli a dav-muz.net
Lun 13 Lug 2015 01:33:01 CEST


Il 12/07/2015 19:26, enrico franchi ha scritto:
> 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).

Non c'è alcuna spiegazione su come deve funzionare il sistema di Carlos 
per cui sono stato molto generico. Ho giusto scritto cosa Go può 
raggiungere senza troppo sbattimento, chiaramente a scopo di paragone 
con Python.

Dipende da quale è il suo bisogno, ha parlato di alcune decine di 
migliaia di router da gestire. Se è un progetto serio avrà un budget e 
l'aiuto di colleghi, eventualmente un sistemista. Ovvio che si può fare 
distribuendo il carico su più server, che è probabilmente la soluzione 
migliore sotto diversi punti di vista, non c'è bisogno di correre di notte.

Questo tizio ha raggiunto 600.000 connessioni per processo con 16GB di 
RAM e il vecchio Go 1.0.3, che è molto più di 90.000 connessioni. Il GC 
da allora è migliorato sensibilmente:
https://groups.google.com/forum/#!searchin/golang-nuts/Garbage$20collecting/golang-nuts/S9goEGuoMRM/FZyd2M6uiVMJ

> In generale e'
> davvero molto piu' semplice usare logiche di pool rispetto che fare
> 90.000 goroutine.

Sono d'accordo. A Qihoo 360 hanno comunque raggiunto 1 milione di 
connessioni/server prima di passare ai pool, sempre con Go 1.0.3.

Dubito che Carlos debba creare un sistemone del genere, probabilmente 
gli basta molto ma molto meno.

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

Basta fare una spike solution per vedere quali numeri ottiene. Python mi 
pare meno adatto per queste cose, se lo deve fare con quello 
probabilmente si trova con limiti ancora maggiori.

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

Hai ragione, è una riga di codice all'inizio del programma per dire 
quante CPU usare. Quello che intendo è che non deve modificare come 
funziona il proprio codice, tipo per usare il multiprocessing in Python.

Byez,
Davide Muzzarelli


Maggiori informazioni sulla lista Python