Apa perbedaan antara konvoi kunci dan pertentangan kunci / utas?
Dari wikipedia di konvoi kunci:
Konvoi kunci terjadi ketika beberapa utas dengan prioritas yang sama bersaing berulang kali untuk kunci yang sama. Tidak seperti situasi deadlock dan livelock, thread dalam konvoi kunci berkembang; namun, setiap kali utas mencoba mendapatkan kunci dan gagal, utas melepaskan sisa kuantum penjadwalannya dan memaksa sakelar konteks. Overhead switch konteks berulang dan kurang digunakannya kuanta penjadwalan menurunkan kinerja secara keseluruhan.
Dari wikipedia tentang perdebatan kunci / utas:
lock contention: ini terjadi setiap kali satu proses atau utas mencoba mendapatkan kunci yang ditahan oleh proses atau utas lain. Semakin halus kunci yang tersedia, semakin kecil kemungkinan satu proses / utas akan meminta kunci yang dipegang oleh yang lain. (Misalnya, mengunci baris daripada seluruh tabel, atau mengunci sel daripada seluruh baris.);
Bisakah seseorang menjelaskan lebih jauh tentang kedua hal itu? Bagi saya sepertinya mereka pada dasarnya sama, atau jika tidak, maka perselisihan kunci pasti menyebabkan konvoi kunci. Apakah itu masalahnya atau apakah mereka konsep yang terpisah dan independen? Juga, saya tidak mengerti kalimat "ia melepaskan sisa kuantum penjadwalannya dan memaksa sakelar konteks".
Jawaban
Ada dua pendekatan pemblokiran yang digunakan dalam algoritma penguncian saat kunci sibuk . putar tunggu atau blokir (tidur, lepaskan prosesor dan tunggu OS mengaktifkan utas dan jadwalkan ulang). Konvoi kunci seperti yang disebutkan akan terjadi ketika strategi pemblokiran digunakan.
OS menjadwalkan utas pada inti dengan cara yang diiris waktu . Setiap utas mendapatkan prosesor untuk beberapa potongan waktu yang ditentukan, katakanlah 2 ms. OS di round-robinjadwalkan mode semua utas dalam antrian siap satu per satu. Jika mengatakan utas setelah mendapatkan jadwal dan memulai pelaksanaannya, katakanlah setelah 100 kami, minta kunci. Jika kunci sibuk, utas tidak bisa mendapatkan kunci, memblokir dan melepaskan prosesor. Jadi sisa waktu 1.9ms (2ms-100us) tidak digunakan oleh thread. Bahkan setelah dibangunkan oleh OS ketika penguncian bebas, utas harus menunggu giliran dalam antrian round-robin. Jumlah utas aktif bisa mencapai 100-an.
Pertentangan kunci menyebabkan efek konvoi.