Reactor Pattern trong NodeJS

Reactor Pattern trong NodeJS

Y t??ng chính c?a m? hình Reactor là m?i thao tác I/O s? có m?t handler ?i kèm. Trong Node.js, handler này ???c bi?u di?n d??i d?ng m?t hàm callback (vi?t t?t là cb).

Handler s? ???c g?i ngay khi m?t s? ki?n ???c t?o ra và ???c Event Loop x? ly. C?u trúc c?a m? hình Reactor ???c minh h?a trong hình bên d??i.


Cách ho?t ??ng c?a m?t ?ng d?ng s? d?ng m? hình Reactor:

1. ?ng d?ng kh?i t?o m?t thao tác I/O m?i b?ng cách g?i yêu c?u ??n Event Demultiplexer. ??ng th?i, ?ng d?ng c?ng ch? ??nh m?t handler, và handler này s? ???c g?i khi thao tác hoàn t?t. Vi?c g?i yêu c?u này là kh?ng ch?n (non-blocking), t?c là nó ngay l?p t?c tr? quy?n ?i?u khi?n l?i cho ?ng d?ng mà kh?ng c?n ch? thao tác hoàn thành.

2. Khi m?t t?p h?p các thao tác I/O hoàn t?t, Event Demultiplexer s? ??y các s? ki?n t??ng ?ng vào Event Queue.

3. Event Loop b?t ??u l?p qua t?ng s? ki?n trong Event Queue.

4. V?i m?i s? ki?n, handler t??ng ?ng s? ???c g?i ?? x? ly.

5. Handler (là m?t ph?n c?a m? ?ng d?ng) s? th?c thi và khi hoàn t?t, nó tr? quy?n ?i?u khi?n l?i cho Event Loop (B??c 5a).

Trong quá trình th?c thi, handler có th? kh?i t?o thêm các thao tác b?t ??ng b? m?i (B??c 5b), d?n ??n vi?c thêm yêu c?u m?i vào Event Demultiplexer (tr? l?i B??c 1).

6. Khi t?t c? các s? ki?n trong Event Queue ?? ???c x? ly, Event Loop s? ti?p t?c ch? (blocking) trên Event Demultiplexer. Khi m?t s? ki?n m?i xu?t hi?n, chu trình s? ti?p t?c.

Hành vi b?t ??ng b? trong m? hình Reactor

Th?ng qua quá trình trên, có th? th?y tính b?t ??ng b? c?a m? hình Reactor nh? sau:

- ?ng d?ng ??ng ky quan tam ??n m?t tài nguyên t?i m?t th?i ?i?m nh?t ??nh mà kh?ng b? ch?n (non-blocking).

- Khi thao tác hoàn t?t, handler s? ???c g?i ?? x? ly k?t qu?.

?? Nh? cách ti?p c?n này, ?ng d?ng có th? x? ly hàng lo?t tác v? I/O hi?u qu? mà kh?ng b? t?c ngh?n do ch? ??i thao tác hoàn t?t.

André Ramos

Senior Software Engineer | Java | Spring Boot | Micro Services | Fullstack Software Developer | Angular | AWS | TechLead

1 个月

Very informative! Thanks for sharing!

回复

要查看或添加评论,请登录

Nguyen Trung Nam的更多文章

  • Stream Processing Pattern

    Stream Processing Pattern

    M?i h? th?ng stream processing ??u có s? khác bi?t, t? m? hình ??n gi?n ch? g?m consumer, logic x? ly và producer, ??n…

    3 条评论
  • Stream Processing Fundamental

    Stream Processing Fundamental

    Có r?t nhi?u nh?m l?n v? khái ni?m stream processing. Nhi?u ??nh ngh?a tr?n l?n chi ti?t tri?n khai, yêu c?u hi?u su?t,…

    9 条评论
  • Suy t? v? blockchain

    Suy t? v? blockchain

    Trong ??i s?ng hàng ngày, khi ?i ch? ho?c siêu th?, làm sao chúng ta bi?t r?ng lo?i rau, th?t, ho?c trái cay chúng ta…

    3 条评论
  • C?i thi?n read throughput khi s? d?ng Elasticsearch

    C?i thi?n read throughput khi s? d?ng Elasticsearch

    Vi?c t?ng s? l??ng replica mang l?i l?i ích hi?u su?t ?áng k?. Replica giúp t?ng th?ng l??ng ??c (read throughput): các…

    5 条评论
  • "Chan kinh" backend developer c?n ph?i c?m ng? (P2)

    "Chan kinh" backend developer c?n ph?i c?m ng? (P2)

    Ti?p n?i bài vi?t tr??c, mình chia s? n?t hai m? hình socket ph? bi?n khác. ? các m? hình tr??c chúng ta th?y r?ng s?…

    1 条评论
  • "Chan kinh" backend developer c?n ph?i c?m ng? (P1)

    "Chan kinh" backend developer c?n ph?i c?m ng? (P1)

    Khi chúng ta là l?p trình viên, nh?ng ng??i th? chan chính, chúng ta th??ng s? ti?p c?n nhi?u m? hình l?p trình socket…

    2 条评论
  • Listener, Acceptor và Reader khái ni?m làm backend c?n ph?i bi?t

    Listener, Acceptor và Reader khái ni?m làm backend c?n ph?i bi?t

    Bài vi?t tr??c chúng ta ?? hi?u cách kernel Linux ho?t ??ng khi ??c và g?i d? li?u, cách nó x? ly các k?t n?i và chuy?n…

  • C? ch? client k?t n?i server t??ng d? hóa khó

    C? ch? client k?t n?i server t??ng d? hóa khó

    Trong quá trình phát tri?n ?ng d?ng, chúng ta th??ng ??a các gi?i pháp t?i ?u database, coding,..

    5 条评论
  • Cassandra có th?t s? ghi nhanh nh? l?i ??n?

    Cassandra có th?t s? ghi nhanh nh? l?i ??n?

    ?? tr? l?i cho cau h?i ? tiêu ?? chúng ta cùng nhau ?i bóc tách ki?n trúc và c? ch? ghi c?a cassandra. V?y h?y cùng xem…

  • Elasticsearch truy v?n d? li?u nh? th? nào?

    Elasticsearch truy v?n d? li?u nh? th? nào?

    Khi ng??i dùng th?c hi?n m?t truy v?n tìm ki?m trên Elasticsearch, r?t nhi?u quá trình di?n ra. Hình 1 minh h?a cách mà…

    2 条评论