Utilizzo di un delegato Posso chiamare qualsiasi funzione in modo asincrono. Dalla documentazione capisco che questo è fatto accodando un workitem per il threadpool.differenza tra chiamate asincrone e chiamate asincrone io in .net
Si possono anche effettuare chiamate asincrone a funzioni di I/O (come leggere da prese, file, pagine Web, ecc.). Penso (ma non sono sicuro) che questo non generi un workitem nel threadpool. Solo dopo aver ottenuto il risultato (o un errore), viene richiamata la chiamata da un nuovo thread nel threadpool.
Questa supposizione è corretta? O è una chiamata IO asincrona, anche sotto le coperte solo qualche thread che viene generato? Se questo è il caso, in che modo le chiamate asincrone possono essere più performanti dei thread di generazione (usando un threadpool) da soli e bloccare?
anche: quante chiamate asincrone possono essere gestite in un dato momento? In caso di utilizzo di un threadpool, immagino quanto vuoi. Ma in caso di chiamate asincrone IO, c'è un limite? Ed è così, come fai a sapere qual è il limite?
@sergey: quindi stai dicendo che c'è davvero una differenza. Quindi quante richieste di IO possono essere sospese in qualsiasi momento? Qual è lo sweetspot? Questo dipende dall'IO mirato o qualcos'altro? Come si può sapere? – Toad
Risposta semplice: dipende. Se si utilizzano le porte di I/O (questa è la tecnica più complicata ma più potente), il sistema operativo creerebbe il minor numero possibile di thread (dipende dalla configurazione hardware) per gestire tutte le attività IO attive. L'utilizzo di IO alertable richiede un thread per! Every! operazioni IO in sospeso. Ecco perché le porte di copulazione IO sono molto più efficaci e scalabili: puoi gestire molte! richieste IO simultanee con risorse minime. Penso che dovresti leggere "Windows via C/C++" o "Programmazione applicazione lato server" di Jeffrey Richter per capire tutto questo. È roba abbastanza dura! –
@reinier I limiti si basano su tutto, dal numero di CPU al codice di licenza di Windows. Ma i limiti non sono importanti - purché si utilizzino i metodi asincroni forniti dal BCL, si sa * si otterrà una migliore scalabilità rispetto a se si ad es. 'QueueUserWorkItem'. – bzlm