Akademi JavaScript · Pelajaran

Tugas Makro dan Baris Gilir Tugas

Fahami cara pemasa dan input/output dijadualkan.

Pelajaran 2 daripada 413 langkah

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.
Percuma untuk bermula

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

  1. Timbunan Panggilan
  2. Tugas Makro dan Baris Gilir Tugas
  3. Tugas Mikro dan Promise
  4. queueMicrotask dan Susunan
← Kembali ke Akademi JavaScript