Rumah  >  Artikel  >  hujung hadapan web  >  Nodejs melaksanakan penyegerakan

Nodejs melaksanakan penyegerakan

WBOY
WBOYasal
2023-05-27 21:26:06730semak imbas

Node.js ialah persekitaran berjalan JavaScript bahagian belakang yang sangat popular yang boleh digunakan untuk menulis aplikasi sisi pelayan berprestasi tinggi dan berkonkurensi tinggi. Walaupun Node.js mempunyai banyak keupayaan pengaturcaraan tak segerak yang berkuasa, dalam sesetengah kes, pengaturcaraan segerak mungkin lebih sesuai untuk senario dan keperluan tertentu.

  1. Apakah pengaturcaraan segerak?

Pengaturcaraan segerak bermakna pelaksanaan program dijalankan dalam susunan tertentu Pelaksanaan kod disekat dan kod akan sentiasa menunggu untuk selesai operasi tertentu. Apabila menghadapi operasi IO atau permintaan rangkaian, program perlu menunggu operasi selesai sebelum meneruskan. Dalam aplikasi Node.js satu benang, jika operasi disekat, prestasi keseluruhan aplikasi mungkin terjejas. Oleh itu, semasa menulis aplikasi Node.js, pengaturcaraan tak segerak sering digunakan untuk mengelakkan sekatan.

  1. Kelebihan Pengaturcaraan Asynchronous

Kelebihan utama pengaturcaraan tak segerak ialah ia meningkatkan prestasi dan kebolehskalaan program. Oleh kerana kod tak segerak boleh dilaksanakan secara selari, berbilang permintaan boleh diproses pada masa yang sama atau berbilang tugas boleh dilakukan secara serentak, mengurangkan masa menunggu dan menyekat.

Pengaturcaraan tak segerak juga mempunyai kelebihan penting, iaitu ia dapat mengelakkan masalah penyegerakan benang yang disebabkan oleh pengaturcaraan berbilang benang. Dalam pengaturcaraan berbilang benang, persaingan antara utas boleh membawa kepada masalah penyegerakan antara utas, yang menjadikan program rumit dan sukar untuk nyahpepijat. Memandangkan Node.js adalah satu-benang, persaingan dan isu penyegerakan antara utas dikurangkan.

  1. Senario terpakai untuk pengaturcaraan segerak

Walaupun pengaturcaraan tak segerak adalah pilihan yang lebih baik dalam kebanyakan kes, terdapat beberapa senario di mana pengaturcaraan segerak mungkin lebih sesuai . Berikut adalah beberapa senario yang sesuai untuk pengaturcaraan segerak:

(1) Program ini perlu melaksanakan berbilang operasi dengan teratur.

(2) Program ini perlu menunggu penyempurnaan operasi tertentu sebelum melaksanakan langkah seterusnya.

(3) Program ini perlu mendapatkan hasil beberapa operasi secara serentak.

(4) Program ini perlu mengendalikan sejumlah besar operasi pengiraan dan bukannya operasi IO.

(5) Program ini perlu memastikan integriti data dan status.

Dalam kes ini, pengaturcaraan segerak boleh menjadikan kod lebih mudah difahami dan nyahpepijat, serta boleh menjadikan penulisan kod kurang sukar.

  1. Pengaturcaraan segerak dalam Node.js

Walaupun Node.js ialah pilihan utama untuk pengaturcaraan tak segerak, Node.js sebenarnya turut menyediakan beberapa mekanisme pengaturcaraan segerak. Berikut ialah beberapa kaedah untuk melaksanakan pengaturcaraan segerak dalam Node.js:

(1) Pembacaan fail segerak

Dalam Node.js, fail boleh dibaca secara serentak dengan menggunakan fs.readFileSync() kaedah boleh merealisasikan bacaan fail segerak Kaedah ini akan menyekat pelaksanaan program sebelum bacaan fail selesai, dan kemudian meneruskan pelaksanaan sehingga bacaan fail selesai.

Berikut ialah skrip Node.js mudah yang digunakan untuk membaca fail teks dan mencetak kandungan fail:

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf-8');

console.log(data);

Kod di atas menggunakan kaedah membaca fail secara serentak, ia akan Menyekat pelaksanaan program sehingga bacaan fail selesai dan menyimpan kandungan fail dalam data berubah. Kemudian, program akan mencetak data.

(2) Pelaksanaan kod sekatan segerak

Dalam Node.js, anda boleh menggunakan fungsi setInterval() untuk melaksanakan operasi pada selang masa tetap. Walau bagaimanapun, fungsi setInterval() adalah tak segerak dan memulakan pemasa untuk melaksanakan operasi tertentu.

Jika anda ingin membuat program Node.js menjeda pelaksanaan untuk satu tempoh masa, anda boleh menggunakan kod berikut:

function sleep(ms) {
  const start = new Date().getTime();
  while (new Date().getTime() < start + ms);
}

console.log('start');
sleep(5000);
console.log('end');

Kod di atas akan menyebabkan program Node.js dijeda pelaksanaan selama 5 saat, dan kemudian Teruskan melaksanakan kod berikutnya. Kod ini menggunakan fungsi tidur, yang menyekat pelaksanaan program untuk tempoh masa tertentu.

(3) Pelaksanaan kod sekatan segerak (Janji)

Dalam Node.js, kami juga boleh menggunakan Promise untuk melaksanakan pelaksanaan kod sekatan segerak. Berikut ialah contoh:

function sleep(ms) {
  return new Promise(resolve => {
    setTimeout(resolve, ms);
  });
}

async function run() {
  console.log('start');
  await sleep(5000);
  console.log('end');
}

run();

Kod di atas menggunakan dua fungsi. Fungsi pertama sleep() akan mengembalikan objek Promise, yang akan melaksanakan fungsi panggil balik resolve() dalam masa yang ditentukan. Fungsi kedua run() ialah fungsi tak segerak yang menunggu objek Promise menyelesaikan pelaksanaan semasa menunggu sleep().

  1. Ringkasan

Walaupun Node.js ialah pilihan utama untuk pengaturcaraan tak segerak, terdapat situasi di mana pengaturcaraan segerak mungkin lebih sesuai untuk senario dan keperluan tertentu. Sebagai contoh, atur cara perlu melaksanakan berbilang operasi dengan teratur atau perlu menunggu selesainya operasi tertentu sebelum meneruskan ke langkah seterusnya. Node.js menyediakan beberapa mekanisme pengaturcaraan segerak, seperti pembacaan fail segerak, pelaksanaan kod sekatan segerak, pelaksanaan kod sekatan segerak (Janji), dsb. Semasa menulis aplikasi Node.js, anda perlu memilih pengaturcaraan tak segerak atau segerak berdasarkan senario tertentu untuk mencapai prestasi dan kebolehskalaan terbaik.

Atas ialah kandungan terperinci Nodejs melaksanakan penyegerakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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