Erlang o 'x' .. Ne vale la pena (rispetto a Python con GIL)?

5

Quindi, sono finalmente arrivato a un punto in cui mi sento abbastanza a mio agio con Python (usando Pyramid come framework di scelta) per intraprendere un progetto personale piuttosto ampio. Dato che si tratta di un progetto personale, ho il lusso di prendermi il mio tempo non avendo assolutamente scadenze diverse da quelle autoimposte.

Adoro imparare nuovi framework, linguaggi, ecc. quindi, se mi viene data una ragione, non mi dispiace tornare indietro sullo sviluppo per un mese o giù di lì mentre imparo un nuovo linguaggio e framework (richiede più tempo quando lo stai facendo il tuo tempo;)).

Recentemente ho appreso il GIL (Global Interpreter Lock) di CPython , che mi ha un po 'sollevato il sopracciglio. Se ho capito bene, questo significa che se ho una Queue nella mia web app e ho dei thread che completano i lavori in coda, allora il codice è bloccato fino a quando il thread per quella richiesta non è completo, il che significa che qualsiasi richiesta successiva è bloccato mentre il thread precedente è in esecuzione.

Domanda:

Qualcuno nelle applicazioni del "mondo reale" ha riscontrato che questo è un problema? Vale la pena imparare una lingua che supporta la reale concorrenza fuori dalla scatola, come ad esempio Erlang? Sono più interessato a qualsiasi benchmark che qualcuno abbia mai fatto nelle app del mondo reale e indipendentemente dal fatto che qualcuno abbia notato problemi reali evidenti con GIL.

    
posta Demian Brecht 21.09.2011 - 00:48
fonte

2 risposte

4

Mi sono imbattuto in GIL nella programmazione lato server in quasi tutte le istanze in cui ho bisogno di qualcosa per scalare milioni di utenti simultanei su più macchine core.

Python è ottimo per gli strumenti da riga di comando e cose che non hanno bisogno della concorrenza reale per estrarre ogni ultimo bit di prestazioni da un determinato pezzo di hardware.

Ma per cose che hanno davvero bisogno di spremere tutto da qualcosa come Sun T2000 , non vuoi scrivere qualcosa in Python, sarà un incubo di manutenzione operativa che esegue 32 processi separati e prova a gestirli tutti.

Ho abbandonato Twisted a favore di Erlang qualche anno fa , Python non lo taglia nello spazio di concorrenza su larga scala. La natura trasparente distribuita di Erlang lo rende scalabile sia orizzontalmente che verticalmente.

    
risposta data 21.09.2011 - 02:15
fonte
3

Il blocco non impedisce di passare da un thread all'altro. Impedisce l'esecuzione contemporanea di più thread. Questo ha solo un effetto per più core. I thread di Python non sfruttano i core multipli. Davvero, questa è l'unica differenza.

Per reiterare, il codice non è bloccato mentre la richiesta è eseguita. Le richieste avverranno fianco a fianco mentre il computer passa da un thread all'altro. Ciò funzionerà esattamente come qualsiasi altra lingua che esegue un computer single-core. Solo se hai più core vedrai una differenza.

Questo probabilmente non è un problema per un'applicazione web. La tua applicazione web trascorrerà la maggior parte del tempo in attesa della connessione di rete. La quantità di tempo speso nel lavoro pesante della CPU è così piccola che non te ne accorgi. Il collo di bottiglia sarà ancora nella rete, quindi il fatto che non è possibile sfruttare i core multipli non è stato un grosso problema.

Se hai davvero bisogno di usare più core Python ha un modulo multiprocessing. Ciò ti consente di controllare processi separati che ti permetteranno di eseguire l'uso di più core. Funziona in modo un po 'diverso da un modulo di threading, ma trovo più facile lavorare con

La mia esperienza personale è che ho creato una piccola libreria che utilizza python, le comunicazioni di rete e più processi per distribuire il lavoro Python su un cluster di computer. Funziona alla grande. Sono in grado di distribuire facilmente il lavoro (purché possa essere suddiviso facilmente) su una collezione di computer. Quindi in pratica niente in Python impedisce di lavorare con questo tipo di cose.

    
risposta data 21.09.2011 - 01:26
fonte

Leggi altre domande sui tag