1. Peranan Penjadual Thread
Penjadual benang menentukan urutan yang boleh dijalankan dan untuk tempoh berapa lama. Dasar penskalaan berbeza antara sistem pengendalian. Adalah penting untuk tidak bergantung pada tingkah laku penjadual untuk menjamin ketepatan atau prestasi program anda, kerana ini menjejaskan kemudahalihan.
2. Strategi untuk Program Teguh: Pengimbangan Benang
Untuk mencipta atur cara yang mantap, pastikan beberapa urutan boleh laku hampir dengan bilangan pemproses yang tersedia. Ini mengelakkan lebihan penjadual dan memastikan tingkah laku yang konsisten. Walaupun jumlah bilangan utas mungkin lebih tinggi, utas menunggu (tidak boleh dijalankan) tidak memberi kesan ketara pada beban sistem.
3. Teknik untuk Menguruskan Benang: Mengelakkan Menunggu Aktif dan Menskala
Elakkan penantian panas, di mana urutan sentiasa menyemak keadaan sumber yang dikongsi. Ini menggunakan sumber pemproses secara tidak perlu. Kurangkan bilangan benang boleh laku dengan mensaiz kumpulan benang dengan betul (seperti dalam Rangka Kerja Pelaksana) dan mencipta tugasan bersaiz sesuai – tidak terlalu kecil sehingga overhed berlaku, tidak terlalu besar sehingga keselarian dihalang.
4. Contoh Amalan Buruk: Harapan Aktif
Kod di bawah menunjukkan penantian aktif:
<code class="language-java">public class SlowCountDownLatch { private int count; public SlowCountDownLatch(int count) { this.count = count; } public void await() { while (count > 0) { // Espera-ativa: desperdício de recursos do processador } } public void countDown() { if (count > 0) { count--; } } }</code>
Kod ini menggunakan sumber yang berlebihan. Penyelesaiannya adalah dengan menggunakan CountDownLatch
, yang menggunakan mekanisme penyekatan yang cekap.
5. Mengelakkan Thread.yield()
Kaedah Thread.yield()
tidak konsisten antara pelaksanaan JVM yang berbeza dan tidak menyediakan penyelesaian yang teguh atau mudah alih untuk masalah bersamaan. Daripada menggunakan Thread.yield()
, susun semula kod untuk mengurangkan bilangan urutan boleh laku.
Contoh salah:
<code class="language-java">while (!condition) { Thread.yield(); // Incorreto: uso de Thread.yield() }</code>
6. Pelarasan Keutamaan Benang
Melaraskan keutamaan benang juga tidak begitu mudah alih, berbeza antara sistem pengendalian dan JVM. Penggunaannya mesti dihadkan kepada senario tertentu di mana peningkatan dalam kualiti perkhidmatan mewajarkan kehilangan kemudahalihan, dan tidak sekali-kali sebagai penyelesaian kepada masalah struktur.
7. Kesimpulan
Jangan bergantung pada penjadual untuk membetulkan atau mengoptimumkan prestasi program anda. Elakkan penggunaan Thread.yield()
dan pelarasan keutamaan yang berlebihan. Pendekatan terbaik ialah menstruktur semula aplikasi anda untuk mengekalkan bilangan urutan boleh laku yang seimbang.
Contoh daripada buku:
Atas ialah kandungan terperinci Perkara Jangan bergantung pada penjadual benang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!