Rumah  >  Artikel  >  hujung hadapan web  >  Adakah nodejs satu proses?

Adakah nodejs satu proses?

青灯夜游
青灯夜游asal
2021-11-11 16:19:362143semak imbas

nodejs ialah satu proses. Node mengikut model proses tunggal berutas tunggal, tetapi ia berdasarkan pada mod tidak sekatan terdorong peristiwa, tak segerak, yang boleh digunakan pada senario konkurensi tinggi dan mengelakkan overhed sumber yang disebabkan oleh penciptaan benang dan penukaran konteks antara utas.

Adakah nodejs satu proses?

Persekitaran pengendalian tutorial ini: sistem Windows 7, nodejs versi 12.19.0, komputer Dell G3.

Proses

Proses ialah aktiviti menjalankan program dalam komputer pada pengumpulan data tertentu Ia adalah unit asas peruntukan sumber dan penjadualan sistem itu adalah asas struktur sistem pengendalian, dan prosesnya adalah bekas benang (dari ensiklopedia). Proses ialah unit terkecil peruntukan sumber. Apabila kami memulakan perkhidmatan dan menjalankan contoh, kami membuka proses perkhidmatan Sebagai contoh, JVM dalam Java sendiri adalah proses Dalam Node.js, proses perkhidmatan dibuka melalui aplikasi nod.js (fork) proses. Setiap proses yang keluar mempunyai alamat ruang bebas dan timbunan data Satu proses tidak boleh mengakses pembolehubah dan struktur data yang ditakrifkan dalam proses lain Hanya apabila komunikasi IPC diwujudkan, data boleh dikongsi antara proses.

Thread

Thread ialah unit terkecil yang sistem pengendalian boleh melaksanakan penjadualan operasi Pertama sekali, kita mesti faham bahawa thread tergolong dalam proses dan termasuk dalam proses . Satu utas hanya boleh tergolong dalam satu proses, tetapi satu proses boleh mempunyai berbilang utas. Single-threaded Single-threaded bermaksud bahawa proses hanya membuka satu thread adalah single-threaded Program dijalankan secara berurutan (JS asynchronous tidak disebut di sini buat masa ini). dilaksanakan, yang seterusnya boleh dilaksanakan Apabila anda menggunakan satu-benang Apabila pengekodan dalam bahasa belitan, jangan mempunyai terlalu banyak operasi penyegerakan yang memakan masa, jika tidak, utas akan disekat dan tindak balas seterusnya tidak dapat diproses. Jika anda menggunakan Javascript untuk pengekodan, sila manfaatkan ciri operasi tak segerak Javascript sebanyak mungkin.

nodejs proses tunggal didorong peristiwa satu benang

Nod mengikut model satu-utas proses tunggal Benang tunggal nod bermaksud enjin js hanya mempunyai satu contoh, dan Ia dilaksanakan dalam utas utama nodejs, dan nod mengendalikan operasi tak segerak seperti IO dalam cara yang didorong oleh peristiwa. Mod satu utas nod hanya mengekalkan satu utas utama, yang sangat mengurangkan kos pertukaran antara utas, tetapi akan terdapat berbilang utas pekerja untuk melaksanakan operasi tak segerak.

Walau bagaimanapun, utas tunggal nod menghalang operasi intensif CPU daripada dilakukan pada utas utama, jika tidak, utas utama akan disekat. Untuk operasi intensif CPU, proses anak bebas boleh dibuat dalam nod melalui child_process Proses induk-anak berkomunikasi melalui IPC Proses anak boleh menjadi aplikasi luar atau subprogram nod Selepas proses anak dilaksanakan kembali kepada proses induk.

Mekanisme pengendalian Node.js

  • Enjin V8 menghuraikan skrip JavaScript.
  • Kod yang dihuraikan memanggil API Node.
  • Pustaka libuv bertanggungjawab untuk pelaksanaan API Node. Ia memperuntukkan tugas yang berbeza kepada utas pekerja yang berbeza untuk membentuk Gelung Peristiwa, dan mengembalikan hasil pelaksanaan tugas kepada enjin V8 dalam cara tak segerak.
  • Enjin V8 mengembalikan hasilnya kepada pengguna.

Gambar ini adalah prinsip operasi keseluruhan Node.js Dari kiri ke kanan, dari atas ke bawah, Node.js terbahagi kepada empat lapisan iaitu aplikasi lapisan, lapisan enjin V8, lapisan API Nod dan lapisan LIBUV.

  • Lapisan aplikasi: Iaitu, lapisan interaksi JavaScript, yang paling biasa ialah modul Node.js, seperti http, fs
  • Lapisan enjin V8: Iaitu, V8 enjin digunakan untuk menghuraikan sintaks JavaScript, dan kemudian Berinteraksi dengan API lapisan bawah
  • Lapisan NodeAPI: Menyediakan panggilan sistem untuk modul lapisan atas, biasanya dilaksanakan dalam bahasa C, untuk berinteraksi dengan sistem pengendalian.
  • Lapisan LIBUV: Ia ialah enkapsulasi peringkat bawah merentas platform yang melaksanakan gelung peristiwa, operasi fail, dll. Ia adalah teras pelaksanaan tak segerak Node.js

Nod. gelung acara js

Node.js biasanya satu proses.

  • Urut utama menjalankan V8 dan Javascript
  • Berbilang sub-utas dijadualkan melalui gelung acara

Gelung acara:

Gelung acara ialah binaan pengaturcaraan yang digunakan untuk menunggu dan menghantar acara atau mesej dalam program Aturcara utama membaca peristiwa daripada "baris gilir tugasan, jadi keseluruhan mekanisme operasi dipanggil". Gelung Acara (gelung peristiwa)

Baris Gilir Acara:

Apabila permintaan rangkaian pengguna atau operasi tak segerak lain tiba, nod akan meletakkannya dalam Baris Gilir Acara Antaranya, ia tidak akan dilaksanakan dengan serta-merta pada masa ini, dan kod itu tidak akan disekat Ia akan diteruskan sehingga kod utas utama dilaksanakan.

Baris gilir tugas:

Baris gilir tugas" ialah baris gilir acara (juga boleh difahami sebagai baris gilir mesej). Apabila peranti IO menyelesaikan tugas, ia berada dalam "tugas" Menambah acara pada "baris gilir" bermakna tugas tak segerak yang berkaitan boleh memasuki "timbunan pelaksanaan". >

Didorong acara:

Intinya adalah untuk menjalankan program melalui gelung utama dan kaedah pencetus acara
nod
Node.js bukan bahasa atau rangka kerja Ia hanyalah persekitaran masa jalan JavaScript berdasarkan enjin Google V8, yang merupakan pengembangan fungsi js. Menyediakan rangkaian, fail, resolusi dns, benang proses dan fungsi lain.

libuv
libuv ialah perpustakaan pakej yang dibangunkan khas untuk Node.js, menyediakan keupayaan I/O tak segerak merentas platform.

Nota:

  • Gelung acara mempunyai satu atau lebih baris gilir tugas. Baris gilir tugas ialah sekumpulan tugasan

  • Libuv terutamanya menggunakan modul dipacu peristiwa yang disediakan oleh sistem untuk menyelesaikan IO tak segerak rangkaian dan menggunakan kumpulan benang untuk menyelesaikan fail IO. Di samping itu, pemasa dilaksanakan untuk merangkum penggunaan proses, benang, dll.

Malah, gelung peristiwa di sini adalah sama dengan gelung peristiwa js dalam penyemak imbas Benang utama membenarkan kod segerak dan kod tak segerak dilaksanakan dalam urutan pekerja yang sepadan. . Selepas hasil pelaksanaan panggilan balik Letakkannya ke dalam baris gilir acara dan tunggu untuk utas utama untuk melaksanakan tugas baris gilir acara.

Gelung peristiwa dipacu peristiwa mencapai keselarasan tinggi

Jujukan pelaksanaan khusus:

1. Setiap proses Node.js hanya mempunyai satu urutan utama yang melaksanakan kod program, membentuk tindanan konteks pelaksanaan

2. Sebagai tambahan kepada utas utama, "Baris gilir acara" juga dikekalkan. Apabila permintaan rangkaian pengguna atau operasi tak segerak yang lain tiba, nod akan memasukkannya ke dalam Baris Gilir Acara Pada masa ini, ia tidak akan dilaksanakan serta-merta, dan kod itu tidak akan disekat sehingga kod utas utama dilaksanakan. lengkap.

3 Selepas pelaksanaan kod utas utama selesai, kemudian melalui Gelung Acara, iaitu mekanisme gelung acara, mula mengeluarkan acara pertama dari permulaan Baris Acara, dan peruntukkan utas daripada kumpulan utas untuk melaksanakan acara ini , kemudian teruskan keluarkan acara kedua, dan kemudian peruntukkan utas daripada kumpulan utas untuk dilaksanakan, kemudian yang ketiga, dan yang keempat. Urutan utama secara berterusan menyemak sama ada terdapat acara yang tidak dilaksanakan dalam baris gilir acara sehingga semua acara dalam baris gilir acara telah dilaksanakan Selepas itu, apabila acara baharu ditambahkan pada baris gilir acara, urutan utama akan dimaklumkan untuk membawanya keluar pesan dan serahkan kepada EventLoop untuk diproses. Apabila acara dilaksanakan, utas utama akan dimaklumkan, utas utama akan melaksanakan panggilan balik dan utas akan dikembalikan ke kumpulan utas.

Nota

Benang tunggal node.js yang kita lihat hanyalah urutan utama js yang berkongsi urutan dengan pemaparan ui Operasi tak segerak pada dasarnya masih dilakukan oleh kumpulan benang Selesai, nod menyerahkan semua operasi menyekat kepada kumpulan benang dalaman untuk pelaksanaan Ia hanya bertanggungjawab untuk penjadualan perjalanan pergi dan balik yang berterusan dan tidak melaksanakan operasi I/O sebenar, dengan itu mencapai I/O tak segerak Ini Intipati benang tunggal dan didorong peristiwa nod.

Ringkasan:

1 Kumpulan utas libuv membuka 4 utas secara lalai dan boleh membuka sehingga 128 utas. (Contohnya: Pada masa lalu, pelayan web hanya boleh menerima sehingga 100 permintaan pada masa yang sama. Jika terlalu banyak, ia tidak akan dapat menerima dan pelayan akan menutup telefon. Apa yang dipanggil tinggi concurrency nodejs bermakna ia boleh menerima 1,000 atau 10,000 permintaan pada masa yang sama Hanya menunggu dalam baris gilir )

2. Urutan utama melaksanakan js, iaitu kod js melakukan banyak pengiraan dan intensif CPU. Jika utas utama tidak percuma, ia tidak dapat menangani perkara IO, jadi ia akan disekat.

3. Panggilan balik hanya boleh menjamin bahawa permintaan tertentu dilaksanakan mengikut tertib, tetapi tidak dapat menjamin tertib yang berbilang permintaan perlu dikunci semasa mengakses sumber untuk menguncinya.

[Pembelajaran yang disyorkan: "tutorial nodejs"]

Atas ialah kandungan terperinci Adakah nodejs satu proses?. 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