625.84K
Категория: ПрограммированиеПрограммирование

How Node.js Works

1.

How Node.js Works
V8 and libuv
Non-blocking model
Node.js scalability
Thread & Thread Pool
How requiring modules work ?

2.

Architecture
V8 Javascript Engine – bu biz yozgan JS code ni mashina ya`ni kompyuter
tushunadigan xolatga o`girib beradi
Libuv – bu open source kutubxona hisoblanib async I/O operation larga ma`sul va
file system, networking kabi boshqa ishlarga ham ushbu kutubxona javobgar.
Bundan tashqari libuv Node.js dagi asosiy qurollardan bo`lgan Thread Pool va Event
Loop ni ishlatib beradi.

3.

Node.js shuningdek http-parser, zlib, c-areas, openSSL kabi kutubxonalarni ham
kapot ostida ishlatib beradi lekin asosiy kurubxonalar bu V8 va libuv hisoblanishadi.

4.

I/O operations
I/O operations – bu dasturning tizimda joylashgan diskka yoki
networkka aralashuvi bo`ladigan ish jarayonlariga aytiladi. Masalan fs
module biror bir faylni o`qishi yoki yozishi ham tizimdagi qaysidir faylga
murojaat sifatida hisoblansa bo`ladi.

5.

Non-blocking I/O operations
Bu turdagi I/O operatsiyalar hech qanaqa kuttirishlarsiz yani dastur
ishlashini to`xtatmasdan qaysidir jarayon bo`ladigan paytda sodir bo`lib
yakunlanadigan operatsiyalar hisoblanishadi.

6.

Non-blocking vs blocking performance

7.

Why node.js scalable ?
Odatiy ( Traditional web serving tecnhiques ) ga qaraganda Node.js
single thread ni o`zida bir vaqtda bo`ladigan judayam ko`p ulanma (
connection ) larni handle qila oladi. Odatiy web server lar ko`pincha har
bir ulanma uchun alohida thread yaratishadi, agarda thread lar bo`sh
bo`lmaydigan bo`lsa qaysidir thread bo`shashini kutib turishadi.

8.

9.

Kichik hisob kitob =))
Odatiy web serverlarda ( Traditional ): Agarda har bir thread miz 2mb
xotiraga ega bo`lib tursa va RAM xotiramiz 8gb bo`ladigan bo`lsa,
bizning dasturga ulanishlar soni 4,000 ta gacha yetishi mumkin.
Node.js: Huddi shu xotiraga ega serverimizda biz 1 million ta gacha bir
vaqtni o`zida bo`ladigan ulanishlar ga erisha olamiz va 600 ming ta
websocket ulanmalariga ham hizmat ko`rsata olamiz.

10.

Thread & Thread Pool
Thread – bu deqqoncha qilib aytadigan bo`lsak ishchi va unga
bo`ladigan barcha ulanmalarga va o`sha ulanmalarni ishi bajarilishiga
ma`sul xisoblanadi. Node.js da esa single-thread ya`ni bitta ishchi.

11.

Quyidagi jarayon bizning thread imiz ishga tushgan paytda yuz beradigan
jarayonlar hisoblanadi

12.

E`tibor beradigan bo`lsak main thread imiz event loop tomonidan ishga
tushiriladi, lekin bizda judayam katta hisob-kitobga ega bo`ladigan task
lar kelib qoladigan bo`lsa main-thread muammoga duch kelishi mumkin
va ana shu jarayonda bizga Thread Pool kerak bo`ladi. Crytography, File
System API s kabi katta ishlarni qo`shimcha thread ochish yordamida
amalga oshiriladi.

13.

Requiring modules

14.

Resolving
Modullar Node.js da asosan 3ga bo`linadi:
1. Core modules
2. Developer Modules
3. 3rd-party modules

15.

Wrapping
Bu jarayonda Node bizning kodimizni maxsus IIFE functionga o`rab
beradi va biz require qayerdan keldi o`zidan o`zi degan savolga shu yo`l
orqali javob topa olishimiz mumkin

16.

Execution – bu code ning ishga tushirilishi.
Returning exports – bu chaqirilgan modulelarning code ni biz
chaqirayotgan module ga chaqirib olamiz)).
Caching – bu agar biz chaqirilgan module ni yana chaqiradigan bo`lsak
node boshqatdan require qilmaydi balki allaqachon execute qilingan
module dan foydalanadi.
English     Русский Правила