国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah hujung hadapan web tutorial js Node JS - Gelung Acara

Node JS - Gelung Acara

Nov 20, 2024 pm 07:03 PM

Node JS - The Event Loop

Kami telah membincangkan mengapa Node JS adalah satu-benang dan juga berbilang benang dalam artikel kami yang dipanggil "Node Dalaman". Ia akan memberi anda asas yang kukuh pada seni bina Node dan menetapkan peringkat untuk memahami keajaiban Gelung Acara!

Nod js boleh dianggap sebagai satu-benang kerana Gelung Peristiwa. Tetapi, apakah gelung acara?

Saya sentiasa bermula dengan analogi restoran kerana saya fikir ia menjadi mudah untuk memahami butiran teknikal.

Jadi, Chef utama di restoran mengambil pesanan daripada senarai pesanan dan memberikannya kepada pasukan pembantu. Apabila makanan sudah siap, chef menghidangkan makanan. Jika ada pelanggan VIP datang maka chef utamakan tempahan ini.

Jika kita mengambil analogi ini sebagai pertimbangan kita maka kita boleh mengatakan bahawa...

Dalam konteks Gelung Acara Node JS.

  • Chef ialah Gelung Acara yang mengurus tugas dan mengagihkan kerja.

  • Pasukan Bantuan ialah rangkaian pekerja atau OS yang mengendalikan pelaksanaan tugas yang diwakilkan kepada mereka.

  • Senarai Pesanan ialah baris gilir tugasan untuk tugasan yang menunggu giliran.

  • Pelanggan VIP ialah Microtask yang mempunyai keutamaan tinggi dan diselesaikan sebelum tugas biasa.

Untuk, Memahami Gelung Peristiwa, kita perlu terlebih dahulu memahami perbezaan antara Tugasan Mikro dan Tugasan Makro.

Tugasan mikro

Microtask bermaksud tugasan yang mempunyai keutamaan tinggi dan dilaksanakan selepas kod Javascript yang sedang dilaksanakan selesai, tetapi sebelum beralih ke fasa seterusnya Gelung Acara.

Contoh:

  • proses.Tick seterusnya
  • Janji (.kemudian, .tangkap, .akhirnya)
  • gilirMicrotask

Tugasan makro

Ini adalah tugas-tugas keutamaan yang lebih rendah yang beratur untuk pelaksanaan pada fasa kemudian dalam Gelung Acara.

Contoh:

  • setTimeout
  • setInterval
  • setImmediate
  • Operasi I/O

Gelung Peristiwa

Apabila kami menjalankan tugas tak segerak dalam Node.js, Gelung Peristiwa adalah teras kepada segala-galanya.

Terima kasih kepada Event Loop, Node.js boleh melaksanakan operasi I/O tanpa sekatan dengan cekap. Ia mencapai ini dengan menyerahkan tugas yang memakan masa kepada sistem pengendalian atau rangkaian pekerja. Setelah tugasan selesai, panggilan balik mereka diproses secara teratur, memastikan pelaksanaan lancar tanpa menyekat urutan utama.

Inilah keajaiban yang membolehkan Node.js mengendalikan berbilang tugas secara serentak sementara masih berbenang tunggal.

Fasa-fasa

Terdapat enam fasa dalam Gelung Acara dan setiap fasa mempunyai baris gilir sendiri, yang memegang jenis tugasan tertentu.

1.Fasa Pemasa

Dalam fasa ini panggilan balik berkaitan pemasa dikendalikan seperti setTimeout dan setInterval.

Node js menyemak baris gilir pemasa untuk panggilan balik yang kelewatannya telah tamat tempoh.

Jika kelewatan pemasa dicapai, panggilan baliknya ditambahkan pada baris gilir ini untuk pelaksanaan.

console.log('Start');

setTimeout(() => {
  console.log('Timer 1 executed after 1 second');
}, 1000);

setTimeout(() => {
  console.log('Timer 2 executed after 0.5 seconds');
}, 500);

let count = 0;
const intervalId = setInterval(() => {
  console.log('Interval callback executed');
  count++;

  if (count === 3) {
    clearInterval(intervalId);
    console.log('Interval cleared');
  }
}, 1000);

console.log('End');

Output:

Start
End
Timer 2 executed after 0.5 seconds
Timer 1 executed after 1 second
Interval callback executed
Interval callback executed
Interval callback executed
Interval cleared

Fasa panggil balik 2.I/O

Tujuan fasa ini adalah untuk melaksanakan panggilan balik untuk operasi I/O (Input/Output) yang lengkap, seperti membaca atau menulis fail, menanya pangkalan data, mengendalikan permintaan rangkaian dan tugas I/O tak segerak yang lain.

Apabila anda datang sebarang operasi I/O tak segerak dalam Node.js (seperti membaca fail menggunakan fs.readFile), operasi itu diwakilkan kepada sistem pengendalian atau rangkaian pekerja. Tugas I/O ini dilaksanakan di luar utas utama dengan cara yang tidak menyekat. Setelah tugas selesai, fungsi panggil balik dicetuskan untuk memproses keputusan.

Fasa Panggilan Balik I/O ialah tempat panggilan balik ini dibariskan untuk pelaksanaan sebaik sahaja operasi selesai.

const fs = require('fs');

console.log('Start');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file:', err);
    return;
  }
  console.log('File contents:', data);
});

console.log('Middle');

setTimeout(() => {
  console.log('Simulated network request completed');
}, 0);

console.log('End');

Output

Start
Middle
End
Simulated network request completed
File contents: (contents of the example.txt file)

3.Fasa terbiar

Dalam fasa ini, tiada kerja yang ditentukan pengguna dilakukan sebaliknya dalam gelung peristiwa fasa ini bersedia untuk fasa seterusnya. hanya pelarasan dalaman dilakukan dalam fasa ini.

4.Fasa tinjauan pendapat

Fasa Undian menyemak sama ada terdapat acara I/O yang belum selesai (seperti aktiviti rangkaian atau acara sistem fail) yang perlu diproses. Ia akan segera melaksanakan panggilan balik yang dikaitkan dengan acara ini.

Jika tiada acara I/O belum selesai, Fasa Tinjauan boleh memasuki keadaan menyekat.

Dalam keadaan menyekat ini, Node.js hanya akan menunggu acara I/O baharu tiba. Keadaan menyekat inilah yang menjadikan Node.js tidak menyekat: Ia menunggu sehingga peristiwa I/O baharu mencetuskan pelaksanaan panggil balik, memastikan urutan utama bebas untuk tugasan lain sementara itu.

Sebarang panggilan balik untuk operasi I/O yang lengkap (seperti fs.readFile, permintaan HTTP atau pertanyaan pangkalan data) dilaksanakan semasa fasa ini. Operasi I/O ini mungkin telah dimulakan dalam fasa sebelumnya (seperti Fasa Pemasa atau Fasa Panggilan Balik I/O) dan kini telah selesai.

Jika terdapat pemasa ditetapkan dengan setTimeout atau setInterval, Node.js akan menyemak sama ada mana-mana pemasa telah tamat tempoh dan jika panggilan balik yang berkaitan perlu dilaksanakan. Jika pemasa telah tamat tempoh, panggilan balik mereka dialihkan ke baris gilir panggil balik, tetapi ia tidak akan diproses sehingga fasa seterusnya, iaitu Fasa Pemasa.

const fs = require('fs');
const https = require('https');

console.log('Start');

fs.readFile('file1.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file1:', err);
    return;
  }
  console.log('File1 content:', data);
});

fs.readFile('file2.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file2:', err);
    return;
  }
  console.log('File2 content:', data);
});

https.get('https://jsonplaceholder.typicode.com/todos/1', (response) => {
  let data = '';
  response.on('data', (chunk) => {
    data += chunk;
  });
  response.on('end', () => {
    console.log('HTTP Response:', data);
  });
});

console.log('End');

Output:

Start
End
File1 content: (contents of file1.txt)
File2 content: (contents of file2.txt)
HTTP Response: (JSON data from the HTTP request)

5.Semak fasa

Selepas Fasa Undian telah menyelesaikan tugasnya. Fasa ini terutamanya mengendalikan pelaksanaan panggilan balik setImmediate, yang dijadualkan untuk dijalankan serta-merta selepas acara I/O diproses dalam Fasa Tinjauan.

setPanggil balik segera sering digunakan apabila anda ingin melakukan tindakan selepas kitaran gelung peristiwa semasa, seperti memastikan beberapa tugasan dilaksanakan selepas sistem tidak sibuk memproses acara I/O.

Fasa Semak mempunyai keutamaan yang lebih tinggi berbanding Fasa Pemasa (yang mengendalikan setTimeout dan setInterval). Ini bermakna setPanggil balik segera akan sentiasa dilaksanakan sebelum mana-mana pemasa walaupun pemasanya telah tamat tempoh.

setImmediate menjamin bahawa panggilan baliknya akan dijalankan selepas kitaran I/O semasa dan sebelum kitaran pemasa seterusnya. Ini boleh menjadi penting apabila anda ingin memastikan bahawa tugasan berkaitan I/O diselesaikan terlebih dahulu sebelum menjalankan tugas lain.

console.log('Start');

setTimeout(() => {
  console.log('Timer 1 executed after 1 second');
}, 1000);

setTimeout(() => {
  console.log('Timer 2 executed after 0.5 seconds');
}, 500);

let count = 0;
const intervalId = setInterval(() => {
  console.log('Interval callback executed');
  count++;

  if (count === 3) {
    clearInterval(intervalId);
    console.log('Interval cleared');
  }
}, 1000);

console.log('End');

Output:

Start
End
Timer 2 executed after 0.5 seconds
Timer 1 executed after 1 second
Interval callback executed
Interval callback executed
Interval callback executed
Interval cleared

6.fasa tutup

Fasa Tutup Panggilan Balik biasanya dilaksanakan apabila aplikasi perlu dibersihkan sebelum keluar atau ditutup.

Fasa ini berurusan dengan acara dan tugasan yang perlu dilaksanakan sebaik sahaja sumber sistem, seperti soket rangkaian atau pemegang fail, tidak diperlukan lagi.

Tanpa fasa ini, aplikasi mungkin membiarkan pemegang fail terbuka, sambungan rangkaian atau sumber lain, yang berpotensi membawa kepada kebocoran memori, kerosakan data atau isu lain.

const fs = require('fs');

console.log('Start');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file:', err);
    return;
  }
  console.log('File contents:', data);
});

console.log('Middle');

setTimeout(() => {
  console.log('Simulated network request completed');
}, 0);

console.log('End');

Output:

Start
Middle
End
Simulated network request completed
File contents: (contents of the example.txt file)

Terdapat satu lagi fasa istimewa dalam Gelung Peristiwa Node JS.

Baris Gilir Tugasan Mikro

process.nextTick() dan berjanji untuk melaksanakan panggilan balik mereka dalam fasa khas dalam Gelung Acara.

process.nextTick() menjadualkan panggilan balik untuk dilaksanakan serta-merta selepas operasi semasa selesai, tetapi sebelum gelung acara diteruskan ke fasa seterusnya.

process.nextTick() bukan sebahagian daripada mana-mana fasa dalam gelung acara. Sebaliknya, ia mempunyai baris gilir dalaman sendiri yang dapat dilaksanakan sejurus selepas kod segerak yang sedang dilaksanakan dan sebelum sebarang fasa dalam gelung acara dimasukkan.

Ia dilaksanakan selepas operasi semasa tetapi sebelum I/O, setTimeout atau tugas lain yang dijadualkan dalam gelung acara.

Janji mempunyai keutamaan yang lebih rendah daripada process.nextTick() dan diproses selepas semua panggil balik process.nextTick().

const fs = require('fs');
const https = require('https');

console.log('Start');

fs.readFile('file1.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file1:', err);
    return;
  }
  console.log('File1 content:', data);
});

fs.readFile('file2.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error reading file2:', err);
    return;
  }
  console.log('File2 content:', data);
});

https.get('https://jsonplaceholder.typicode.com/todos/1', (response) => {
  let data = '';
  response.on('data', (chunk) => {
    data += chunk;
  });
  response.on('end', () => {
    console.log('HTTP Response:', data);
  });
});

console.log('End');

Output:

Start
End
File1 content: (contents of file1.txt)
File2 content: (contents of file2.txt)
HTTP Response: (JSON data from the HTTP request)

Kini, Anda mempunyai idea keseluruhan tentang cara Gelung Acara berfungsi.

Saya memberi anda satu soalan yang mana jawapan anda boleh berikan dalam ulasan.

const fs = require('fs');

console.log('Start');

fs.readFile('somefile.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('File content:', data);
});

setImmediate(() => {
  console.log('Immediate callback executed');
});

setTimeout(() => {
  console.log('Timeout callback executed');
}, 0);

console.log('End');

Terima kasih.

Menunggu jawapan anda.

Atas ialah kandungan terperinci Node JS - Gelung Acara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Bagaimana membuat permintaan HTTP di node.js? Bagaimana membuat permintaan HTTP di node.js? Jul 13, 2025 am 02:18 AM

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis Data JavaScript: Rujukan primitif vs Jenis Data JavaScript: Rujukan primitif vs Jul 13, 2025 am 02:43 AM

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Objek Masa JavaScript, seseorang membina eactexe, laman web lebih cepat di Google Chrome, dll. Objek Masa JavaScript, seseorang membina eactexe, laman web lebih cepat di Google Chrome, dll. Jul 08, 2025 pm 02:27 PM

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

Mengendalikan Janji: Chaining, Pengendalian Kesalahan, dan Janji Gabungan di JavaScript Mengendalikan Janji: Chaining, Pengendalian Kesalahan, dan Janji Gabungan di JavaScript Jul 08, 2025 am 02:40 AM

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

Apakah API cache dan bagaimana ia digunakan dengan pekerja perkhidmatan? Apakah API cache dan bagaimana ia digunakan dengan pekerja perkhidmatan? Jul 08, 2025 am 02:43 AM

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.

JS Roundup: menyelam jauh ke dalam gelung acara JavaScript JS Roundup: menyelam jauh ke dalam gelung acara JavaScript Jul 08, 2025 am 02:24 AM

Gelung acara JavaScript menguruskan operasi tak segerak dengan menyelaraskan susunan panggilan, webapis, dan barisan tugas. 1. Stack panggilan melaksanakan kod segerak, dan ketika menghadapi tugas -tugas yang tidak segerak, ia diserahkan kepada Webapi untuk diproses; 2. Selepas Webapi melengkapkan tugas di latar belakang, ia meletakkan panggil balik ke dalam barisan yang sama (tugas makro atau tugas mikro); 3. Loop acara memeriksa sama ada timbunan panggilan kosong. Jika ia kosong, panggilan balik diambil dari barisan dan ditolak ke dalam tumpukan panggilan untuk pelaksanaan; 4. Tugas -tugas mikro (seperti janji. 5. Memahami gelung acara membantu mengelakkan menyekat benang utama dan mengoptimumkan pesanan pelaksanaan kod.

Memahami acara menggelegak dan menangkap dalam acara DOM JavaScript Memahami acara menggelegak dan menangkap dalam acara DOM JavaScript Jul 08, 2025 am 02:36 AM

Gelembung peristiwa menyebarkan dari elemen sasaran ke luar ke nod nenek moyang, sementara penangkapan peristiwa menyebarkan dari lapisan luar ke dalam ke elemen sasaran. 1. Bubbles Acara: Selepas mengklik elemen kanak -kanak, acara itu mencetuskan pendengar elemen induk ke atas. Sebagai contoh, selepas mengklik butang, ia mengeluarkan anak -anak terlebih dahulu, dan kemudian ParentClicked. 2. Tangkap Acara: Tetapkan parameter ketiga menjadi benar, supaya pendengar dilaksanakan di peringkat penangkapan, seperti mencetuskan pendengar penangkapan elemen induk sebelum mengklik butang. 3. Penggunaan praktikal termasuk pengurusan bersatu peristiwa elemen kanak -kanak, pemprosesan pemintasan dan pengoptimuman prestasi. 4. Aliran acara DOM dibahagikan kepada tiga peringkat: menangkap, sasaran dan gelembung, dan pendengar lalai dilaksanakan di peringkat gelembung.

JS Roundup fungsi pesanan lebih tinggi di luar peta dan penapis JS Roundup fungsi pesanan lebih tinggi di luar peta dan penapis Jul 10, 2025 am 11:41 AM

Dalam tatasusunan JavaScript, sebagai tambahan kepada peta dan penapis, terdapat kaedah lain yang kuat dan jarang digunakan. 1. Mengurangkan bukan sahaja dapat jumlah, tetapi juga mengira, kumpulan, array meratakan, dan membina struktur baru; 2. Cari dan FindIndex digunakan untuk mencari elemen atau indeks individu; 3. Beberapa dan segala -galanya digunakan untuk menentukan sama ada keadaan wujud atau semua memenuhi; 4.Sort boleh disusun tetapi akan mengubah array asal; 5. Beri perhatian untuk menyalin array apabila menggunakannya untuk mengelakkan kesan sampingan. Kaedah ini menjadikan kod lebih ringkas dan cekap.

See all articles