Qual è la differenza tra un thread di lavoro e un thread di I / O?
-
02-07-2019 - |
Domanda
Guardando l'elemento processmodel in Web.Config ci sono due attributi.
maxWorkerThreads="25"
maxIoThreads="25"
Qual è la differenza tra thread di lavoro e thread di I / O?
Soluzione
Fondamentalmente non molto, è tutto su come ASP.NET e IIS allocano gli oggetti I / O wait e gestiscono la contesa e la latenza della comunicazione sulla rete e del trasferimento dei dati.
I thread I / O sono accantonati come tali perché eseguiranno I / O (come suggerisce il nome) e potrebbe essere necessario attendere "long". periodi di tempo (centinaia di millisecondi). Inoltre, possono essere ottimizzati e utilizzati in modo diverso per sfruttare la funzionalità della porta di completamento I / O nel kernel di Windows. Un singolo thread I / O potrebbe gestire più porte di completamento per mantenere il throughput.
Windows ha molte funzionalità per gestire il blocco degli I / O, mentre ASP.NET/.NET ha un semplice concetto di " Thread " ;. ASP.NET può ottimizzare per l'I / O utilizzando più funzionalità di threading non gestito nel sistema operativo. Non vorrai farlo sempre per ogni thread poiché perdi molte funzionalità che .NET ti offre, motivo per cui esiste una distinzione tra il modo in cui i thread sono destinati a essere utilizzati.
I thread di lavoro sono thread su cui regolare "lavoro" o accade semplicemente codice / elaborazione. È improbabile che i thread di lavoro si blocchino molto o attendano qualsiasi cosa e avranno una corsa breve e pertanto richiedono una pianificazione più aggressiva per massimizzare la potenza di elaborazione e la velocità effettiva.
[Modifica]: ho trovato anche questo link che è particolarmente rilevante per questa domanda: http: / /blogs.msdn.com/ericeil/archive/2008/06/20/windows-io-threads-vs-managed-io-threads.aspx
Altri suggerimenti
Solo per aggiungere ai chadmyers ... Sembra che I / O Threads fosse il vecchio modo in cui ASP.NET gestiva le richieste,
" Le richieste in IIS 5.0 sono in genere revisionato su thread I / O o thread eseguire I / O asincroni perché le richieste vengono inviate al lavoratore processo che utilizza scritture asincrone in a named pipe. "
con IIS6.0 questo è cambiato.
" Pertanto, tutte le richieste sono ora gestite da thread di lavoro estratti dal CLR pool di thread e mai su thread I / O. "
Fonte: http://msdn.microsoft.com /hi-in/magazine/cc164128(en-us).aspx