In un'applicazione console a thread singolo, le persone utilizzano spesso Thread.Sleep
come modo pigro per mettere in pausa l'applicazione per un po 'di tempo.Esce il programma di blocco del sonno? Come viene implementato?
Questa domanda ha sollevato interessanti spunti di non usare questo approccio: Why is Thread.Sleep so harmful
Tuttavia diverso sapendo che i blocchi del sonno il thread corrente, non capisco come funziona - per esempio lo fa max fuori il core della CPU in un ciclo stretto o mette effettivamente in pausa il thread?
Ancora più importante per me, in che modo un'app console risponde a vari scenari di uscita app (CTRL-C, kill, pulsante di chiusura della finestra) quando viene catturato nel mezzo di uno stato di sospensione? Continuerà ciecamente a eseguire l'esecuzione fino a quando il sistema operativo non lo forzerà, o si comporterà bene?
Si dice semplicemente thread scheduler del sistema operativo di non riprogrammare il thread per l'esecuzione per il periodo di tempo specificato. Così sicuro, è "in pausa". Le uccisioni da console sono implementate dal sistema operativo e terminano semplicemente il processo. Qualunque cosa stiano facendo i thread nel processo non è rilevante, smettono di essere, in stile pappagallo norvegese. –
Per chi fosse interessato, è possibile vedere [implementazione per 'Thread.Sleep()' qui] (http://referencesource.microsoft.com/#mscorlib/system/threading/thread.cs,5f1072b92dae1dd8). –
Grazie a @HansPassant 'sospeso' è il termine che volevo - mentre Sheeo sottolinea esplicitamente che il thread è sospeso anziché portare allo spin-lock. Nizza riferimento MP. –