1. Masalah dengan menggunakan timer dalam simpul adalah tidak akurat. Misalnya, setTimeout () menetapkan tugas untuk dieksekusi setelah 10ms, tetapi setelah 9ms, tugas membutuhkan 5ms. Ketika itu adalah giliran timer lagi, ia telah ditunda oleh 4ms.
Nah, ada banyak hal untuk dikatakan tentang timer di Node.
2. Lihat kodenya:
Salinan kode adalah sebagai berikut:
process.nexttick (function () {
Console.log ("Eksekusi Tertunda");
});
console.log ("Execute 1 Normal");
Console.log ("Eksekusi Biasa 2");
Console.log ("Eksekusi Normal 3");
Console.log ("Eksekusi Biasa 4");
Melalui contoh ini, saya pikir semua orang dapat dengan jelas melihat untuk apa NextTick () digunakan. Ini terutama digunakan untuk eksekusi asinkron.
Melihat kode:
Salinan kode adalah sebagai berikut:
setimmediate (function () {
Console.log ("Eksekusi Tertunda");
});
Console.log ("Eksekusi Normal");
Kami menemukan bahwa setimmediate juga dieksekusi secara tidak sinkron. Itu aneh
Jadi apa perbedaan antara itu dan nextTick ()?
Lihat kodenya:
Kode 1:
Salinan kode adalah sebagai berikut:
process.nexttick (function () {
Console.log ("NextTick Delay")
});
setimmediate (function () {
console.log ("setimmediate delay");
});
Console.log ("Eksekusi Normal");
hasil:
Kode 2:
Salinan kode adalah sebagai berikut:
setimmediate (function () {
console.log ("setimmediate delay");
});
process.nexttick (function () {
Console.log ("NextTick Delay")
});
Console.log ("Eksekusi Normal");
hasil:
Saya menemukan bahwa meskipun urutan kode berbeda, hasil eksekusi sama.
Dari hasilnya, kita dapat menemukan:
Prioritas eksekusi fungsi panggilan balik nextTick () lebih tinggi dari setimmediate ();
Process.nexttick () milik pengamat idle, dan setimmediate () termasuk untuk memeriksa pengamat. Dalam setiap putaran pemeriksaan loop, pengamat idle di depan pengamat I/O, dan pengamat I/O berada di depan pengamat cek.
Dalam implementasi spesifik, fungsi callback dari proses.nexttick () disimpan dalam array.
Hasil setimmediate () disimpan dalam daftar tertaut.
Dalam hal perilaku, Process.nextTick () akan menjalankan semua fungsi panggilan balik dalam array di setiap loop.
setimmediate () menjalankan fungsi panggilan balik dalam daftar tertaut di setiap loop.
Salinan kode adalah sebagai berikut:
// Tambahkan 2 Fungsi Callback NextTick ()
process.nexttick (function () {
Console.log ("NextTick Daerah Eksekusi 1");
});
process.nexttick (function () {
Console.log ("Eksekusi Penundaan Nextick 2");
});
// Tambahkan dua fungsi callback setimmediate ()
setimmediate (function () {
Console.log ("Setimmediate Daerah Eksekusi 1");
process.nexttick (function () {
console.log ("insert kuat");
});
});
setimmediate (function () {
Console.log ("Setimmediate Daerah Eksekusi 2");
});
Console.log ("Eksekusi Normal");
Dari hasil eksekusi, dapat dilihat bahwa ketika fungsi callback setimmediate pertama () dieksekusi, yang kedua tidak segera dieksekusi, tetapi memasuki putaran loop berikutnya, dan dieksekusi lagi dalam urutan prioritas nextTick () dan setimmediate () kali. Alasan untuk desain ini adalah untuk memastikan bahwa setiap loop dapat dieksekusi dengan cepat dan mencegah CPU mengonsumsi terlalu banyak dan memblokir panggilan I/O berikutnya.
Di atas adalah informasi tentang perbedaan antara nextTick () dan setimmediate () di node.js. Apakah Anda jelas tentang perbedaan di antara mereka?