Tugas Makro dan Baris Gilir Tugas
Fahami cara pemasa dan input/output dijadualkan.
Tugas Makro dan Baris Gilir Tugas ialah pelajaran Akademi JavaScript percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi JavaScript, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi JavaScript merangkumi sejumlah 4 pelajaran.
Apakah Tugas Makro?
Tugas makro (juga dipanggil tugas) ialah unit kerja yang dijadualkan untuk berjalan kemudian, selepas kod segerak semasa selesai. Fungsi panggil balik setTimeout ialah contoh klasik.
Tugas makro menunggu dalam baris gilir tugas sehingga tindanan panggilan kosong.
setTimeout Menangguhkan Kerja
setTimeout mendaftarkan fungsi panggil balik untuk berjalan kemudian. Walaupun kelewatannya ialah 0, fungsi itu berjalan selepas semua kod segerak semasa.
console.log('first');
setTimeout(() => console.log('third (timeout)'), 0);
console.log('second');Baris Gilir Tugas
Apabila pemasa tamat, fungsi panggil baliknya diletakkan dalam baris gilir tugas. Gelung peristiwa mengambil satu tugas daripada baris gilir ini hanya apabila tindanan panggilan kosong, menjalankannya sehingga selesai, kemudian memeriksa semula.
console.log('sync start');
setTimeout(() => console.log('task 1'), 0);
setTimeout(() => console.log('task 2'), 0);
console.log('sync end');Tugas Berjalan Mengikut Turutan Giliran
Tugas dengan kelewatan yang sama berjalan mengikut turutan ia dijadualkan. Baris gilir tugas mengikut FIFO: Masuk Dahulu, Keluar Dahulu.
setTimeout(() => console.log('A'), 0);
setTimeout(() => console.log('B'), 0);
setTimeout(() => console.log('C'), 0);
console.log('sync');Kelewatan ialah Minimum, Bukan Tepat
Kelewatan yang anda berikan ialah tempoh minimum sebelum fungsi panggil balik layak berjalan. Pelaksanaan sebenar hanya berlaku selepas tindanan dikosongkan dan tugas terdahulu selesai, jadi waktunya mungkin lebih lewat.
setTimeout(() => console.log('100ms'), 100);
setTimeout(() => console.log('0ms'), 0);
console.log('synchronous runs first');Mengisih berdasarkan Kelewatan
Kelewatan yang berbeza mengubah susunan: kelewatan yang lebih pendek menjadi layak lebih awal, jadi tugas tersebut biasanya berjalan sebelum tugas yang lebih lama walaupun mengikut turutan penjadualan.
setTimeout(() => console.log('50'), 50);
setTimeout(() => console.log('10'), 10);
setTimeout(() => console.log('30'), 30);
console.log('start');Satu Tugas bagi Setiap Pusingan Gelung
Gelung peristiwa menjalankan tepat satu tugas makro bagi setiap pusingan, kemudian melaksanakan kerja lain sebelum pusingan seterusnya. Hal ini memastikan sistem kekal responsif antara tugas.
console.log('1');
setTimeout(() => {
console.log('2');
setTimeout(() => console.log('4'), 0);
}, 0);
setTimeout(() => console.log('3'), 0);Pemasa Bersarang Beratur Kemudian
Pemasa yang dijadualkan dalam satu tugas menyertai baris gilir di belakang tugas yang sudah menunggu, jadi pemasa itu berjalan dalam pusingan gelung yang kemudian.
setTimeout(() => {
console.log('outer');
setTimeout(() => console.log('inner nested'), 0);
}, 0);
setTimeout(() => console.log('sibling'), 0);setInterval Juga Merupakan Tugas Makro
setInterval menjadualkan tugas makro berulang. Di sini, kami menjalankan beberapa lelaran dan menghentikannya dengan clearInterval supaya keluaran kekal terhad.
let count = 0;
const id = setInterval(() => {
count++;
console.log('tick ' + count);
if (count === 3) clearInterval(id);
}, 10);
console.log('interval scheduled');Segerak Sentiasa Diutamakan
Walau sekecil mana pun kelewatannya, setiap tugas makro menunggu selepas semua kod segerak dalam pelaksanaan semasa. Tindanan mesti dikosongkan dahulu.
setTimeout(() => console.log('macrotask'), 0);
for (let i = 1; i <= 3; i++) console.log('sync ' + i);
console.log('done sync');Mengapa Tugas Makro Penting
Tugas makro membolehkan anda menangguhkan kerja tanpa menyekat. Memecahkan kerja berat kepada bahagian berjangka memastikan aplikasi kekal responsif. Namun, tugas makro bukan keutamaan tertinggi: tugas mikro (janji) berjalan sebelum tugas makro seterusnya, seperti yang akan anda lihat kemudian.
console.log('schedule');
setTimeout(() => console.log('runs after sync'), 0);
console.log('still sync');Semakan Pantas
Bilakah fungsi panggil balik setTimeout(cb, 0) berjalan?
Ulang Kaji: Tugas Makro
Anda telah mempelajari cara kerja tertunda dijadualkan:
- Tugas makro (
setTimeout,setInterval) menunggu dalam baris gilir tugas. - Baris gilir mengikut FIFO; gelung peristiwa menjalankan satu tugas bagi setiap pusingan.
- Kelewatan ialah nilai minimum dan kod segerak sentiasa berjalan dahulu.
- Tugas mikro mempunyai keutamaan lebih tinggi, yang akan anda terokai seterusnya.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 59
- Pelajaran
- 200
Soalan Lazim
Adakah pelajaran “Tugas Makro dan Baris Gilir Tugas” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Akademi JavaScript, termasuk “Tugas Makro dan Baris Gilir Tugas”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Akademi JavaScript merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Tugas Makro dan Baris Gilir Tugas”?
Fahami cara pemasa dan input/output dijadualkan. Anda berlatih Akademi JavaScript menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi JavaScript?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi JavaScript di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Tugas Makro dan Baris Gilir Tugas” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi JavaScript ini?
Ya. Setiap pelajaran Akademi JavaScript menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Timbunan Panggilan
- Tugas Makro dan Baris Gilir Tugas
- Tugas Mikro dan Promise
- queueMicrotask dan Susunan