Bagikan melalui


Layanan Pemesanan Utas

Layanan pemesanan utas mengontrol eksekusi satu atau beberapa utas klien. Ini memastikan bahwa setiap utas klien berjalan sekali selama periode yang ditentukan dan dalam urutan relatif.

Windows Server 2003 dan Windows XP: Layanan pemesanan utas tersedia dimulai dengan Windows Vista dan Windows Server 2008.

Layanan pemesanan utas nonaktif secara default dan harus dimulai oleh pengguna. Saat layanan pemesanan utas berjalan, layanan ini diaktifkan setiap 5 detik untuk memeriksa apakah ada permintaan baru, bahkan jika sistem menganggur. Ini mencegah sistem tidur lebih dari 5 detik, menyebabkan sistem mengonsumsi lebih banyak daya. Jika efisiensi energi sangat penting untuk aplikasi, lebih baik tidak menggunakan layanan pemesanan utas dan sebaliknya memungkinkan penjadwal sistem untuk mengelola eksekusi utas.

Setiap utas klien termasuk dalam grup pemesanan utas. Utas induk membuat satu atau beberapa grup pengurutan utas dengan memanggil fungsi AvRtCreateThreadOrderingGroup. Utas induk menggunakan fungsi ini untuk menentukan periode untuk grup pengurutan utas dan interval waktu habis.

Utas klien tambahan memanggil fungsi AvRtJoinThreadOrderingGroup untuk bergabung dengan grup pemesanan utas yang ada. Utas ini menunjukkan apakah mereka akan menjadi pendahulu atau penerus utas induk dalam urutan eksekusi. Setiap utas klien diharapkan untuk menyelesaikan sejumlah pemrosesan setiap periode. Semua utas dalam grup harus menyelesaikan eksekusinya dalam periode ditambah interval waktu habis.

Utas grup pengurutan utas mengapit kode pemrosesan mereka dalam perulangan yang dikendalikan oleh fungsi AvRtWaitOnThreadOrderingGroup . Pertama, utas pendahulu dijalankan satu per satu dalam urutan mereka bergabung dengan grup, sementara utas induk dan penerus diblokir pada panggilan mereka ke AvRtWaitOnThreadOrderingGroup. Ketika setiap utas pendahulu selesai dengan pemrosesannya, kontrol eksekusi kembali ke bagian atas perulangan pemrosesannya dan utas memanggil AvRtWaitOnThreadOrderingGroup lagi untuk memblokir hingga giliran berikutnya. Setelah semua utas pendahulu memanggil fungsi ini, layanan pemesanan utas dapat menjadwalkan utas induk. Akhirnya, ketika utas induk menyelesaikan pemrosesannya dan memanggil AvRtWaitOnThreadOrderingGroup lagi, layanan pemesanan utas dapat menjadwalkan utas penerus satu per satu dalam urutan mereka bergabung dengan grup. Jika semua utas menyelesaikan eksekusinya sebelum periode berakhir, semua utas menunggu hingga sisa periode berlalu sebelum dieksekusi lagi.

Ketika klien tidak perlu lagi berjalan sebagai bagian dari grup pemesanan utas, klien memanggil fungsi AvRtLeaveThreadOrderingGroup untuk menghapus dirinya dari grup. Perhatikan bahwa utas induk tidak boleh menghapus dirinya sendiri dari grup pemesanan utas. Jika utas tidak menyelesaikan eksekusinya sebelum periode ditambah interval waktu habis berlalu, maka alur dihapus dari grup.

Utas induk memanggil fungsi AvRtDeleteThreadOrderingGroup untuk menghapus grup pengurutan utas. Grup pengurutan utas juga dihancurkan jika utas induk tidak menyelesaikan eksekusinya sebelum periode ditambah interval waktu habis berlalu. Ketika grup pemesanan utas dihancurkan, setiap panggilan ke AvRtWaitOnThreadOrderingGroup dari utas grup tersebut gagal atau kehabisan waktu.