L'affermazione che i thread sono "leggeri" è - a seconda della piattaforma - non necessariamente affidabile.
Una thread del sistema operativo deve supportare l'esecuzione di codice nativo, ad es. scritto in C. Quindi deve fornire uno stack di dimensioni decenti, di solito misurato in megabyte. Quindi, se avessi avviato 1000 thread (forse nel tentativo di supportare 1000 connessioni simultanee al tuo server) avresti un requisito di memoria di 1 GB nel tuo processo prima ancora che tu possa iniziare a fare del vero lavoro.
Questo è un problema reale nei server altamente scalabili, quindi non utilizzano thread come se fossero leggeri. Li trattano come risorse pesanti. Potrebbero invece creare un numero limitato di thread in un pool e lasciare che prendano oggetti di lavoro da una coda.
Poiché ciò significa che i thread sono longevi e di numero ridotto, potrebbe essere preferibile utilizzare invece i processi. In questo modo si ottiene l'isolamento dello spazio degli indirizzi e non c'è davvero un problema con l'esaurimento delle risorse.
In breve: diffidare delle dichiarazioni di "marketing" fatte per conto dei thread. L'elaborazione parallela è ottima (sarà sempre più essenziale), ma i thread sono solo un modo per raggiungerlo.
fonte
2010-02-15 17:33:27
Continuare a binging per "la creazione di processi" e il sistema operativo e vedrete quanta overhead ci sia dentro per creare un processo. –
@ No rimborsi n. Resi: E scoprirai che si differenzia notevolmente tra i sistemi operativi. –
@No Rimborsi non restituiti - qual è l'overheard della sincronizzazione della cache tra i thread su un computer multi-core o il sovraccarico del cambio di contesto e il salvataggio dello stack e del set di registri? – zebrabox