Ketika Anda tidur utas, apa yang sebenarnya terjadi?
Saya melihat bahwa menidurkan utas "menjeda utas saat ini untuk jangka waktu tertentu" . Tapi bagaimana cara kerjanya?
Menurut How Thread.sleep () bekerja secara internal dan Bagaimana Thread.sleep benar-benar berfungsi? :
- durasi tidur akan dikenakan granularity khusus sistem
- tidur menghalangi
- utas meninggalkan CPU dan menghentikan eksekusi
- utas tidak menghabiskan waktu CPU saat tidur
Saya tidak bisa mengerti mekanisme internal dan fundamental dari apa arti semua ini.
Saya mengerti bahwa ada sesuatu yang disebut scheduler yang bertanggung jawab untuk beralih antar utas.
Sumber tampaknya menunjukkan bahwa ini bervariasi berdasarkan OS (atau perangkat keras?) Dan sebagian besar utas diberikan 1ms - 60ms atau lebih untuk melakukan beberapa tindakan sebelum CPU beralih ke utas lainnya.
Tetapi ketika sebuah thread tertidur (misalnya, beberapa detik), bagaimana cara melanjutkannya? Saya kira timer terlibat, entah bagaimana, itu jam motherboard? Apakah ini terkait dengan laju jam CPU?
Dan bahkan jika timer terlibat, bagaimana CPU tahu kapan waktunya untuk memperhatikan utas lagi? Bukankah harus selalu memeriksa utas untuk melihat apakah sudah siap? Bukankah itu efektif polling dan karena itu jenis ini memakan waktu CPU?
Apakah tidur thread-bahasa khusus atau OS bertanggung jawab untuk itu atau itu hal yang spesifik CPU?
Bisakah seseorang menjelaskan hal ini kepada saya dengan penjelasan dasar tentang hal-hal seperti scheduler dan apa yang CPU lakukan selama semua ini?