Bài 4 nodejs: non-Blocking I/O and Asynchronous Events

Bài 4 nodejs: non-Blocking I/O and Asynchronous Events

Có hai yếu tố mạnh mẽ nhất làm Node.js thông dụng trong thời gian thật ngắn: Cả server và browser có thể cùng điều hành bởi 1 ngôn ngữ lập trình, JavaScript. Yếu tố này chỉ là sự việc tình cờ khi Ryan Dahl chọn JavaScript làm ngôn ngữ lập trình để viết Node.js, anh ta không có ý là cả hai phía server và browser phải dùng cùng ngôn ngữ. Yếu tố thứ hai, non-Blocking I/O and Asynchronous Events, và đây mới là động lực duy nhất thúc đẩy Ryan Dahl tạo ra Node.js.

Non-Blocking I/O, một cách đơn giản, có nghĩa những công việc gì có dính dáng về input output không thể có quyền ngăn chặn những công việc khác. IO có nghĩa dữ kiện chạy đi chạy lại từ một nơi này đến một nơi khác như từ: bộ nhớ vào ổ cứng hay ngược lại; server đến browser và ngược lại, vân vân. Trong các loại công việc của máy tính, chung chung, IO là chậm nhất. Chậm hơn rất nhiều so với tính toán. Vì lý do đó nếu IO được điều hành làm sao mà không bê trễ những công việc khác của máy tính thì cả hệ thống tính toán sẽ bớt trì trệ, hay nói cách khác là nhanh hơn. Điều này không phải là khám phá mới mà đã được làm trong quá khứ, tuy nhiên chỉ là đắp vá tạm thời và chưa bao giờ ở cả một hệ thống tính toán như node.js.

Asynchronous Events có thể chung chung là mọi biến có đều phải theo một thứ tự trước sau. Có nghĩa khác với Synchronous (đồng bộ) hay Parallel (song song).

Hai ý tưởng này hợp lại có nghĩa sự kiện sảy ra theo thứ tự trước sau như đã xếp hàng trong trong lập trình; tuy nhiên nếu có sự kiện nào phải chờ đợi IO thì cứ chờ nhưng không vì cớ đó mà ngăn chặn những sự kiện khác trong hàng

Cô Hoa và anh Tư Ếch

Lấy một thí dụ đời thường. Cô Hoa là chủ một tiệm tạp hóa. Công việc hằng ngày là sắp xếp hàng hóa, thu hàng vào, gửi hàng đi, và việc quan trọng hơn cả là tiếp khách hàng, Tiệm nhỏ nhưng lúc nào cũng đầy công việc và cô Hoa lúc nào cũng bận bịu không vì việc này thì cũng việc khác. Tiệm buôn bán khá phần lớn nhờ váo phong cách đối đãi niềm nở với khách hàng của cô Hoa. Có một lần cô Hoa phải đi xa và phải mướn người trông tiệm, anh Tư Ếch, có tiếng là siêng năng cần mẫn và nhất nhất vâng lời chủ dặn (đặc tính của hệ thống vi tính). Trước đó, để sửa soạn, cô viết xuống giấy (lập trình) những việc phải làm trong ngày theo thứ tự (asychronous) mà cô vẫn làm bao nhiêu năm nay cho anh Tư và dặn cứ làm theo thứ tự thì sẽ trôi chẩy. Cô Hoa đi công việc nhưng rất yên tâm, thầm cảm ơn vì mướn được người như anh Tư Ếch. Một tuần sau cô Hoa về thì thấy tiệm tùng ngăn nắp sạch sẽ nhưng khi kiểm chi thu thì hình như chẳng được đồng nào. Cô không hiểu tại sao và khi hỏi anh Tư,

"Cả tuần em đi vắng tiệm không có khách à?"
"Có chứ, mấy ngày đầu đông lắm nhưng những ngày sau họ không đến nữa," anh đáp.
"Ủa! Tại sao vậy?"
"Khách đến đông nhưng không ai tiếp. Tui thì mắc dọn dẹp và xếp hàng hóa."

Cô Hoa mới vỡ lẽ rằng trong lập trình của cô, tiếp khách là việc sau cùng. Anh Tư hiểu rằng phải bày biện, lau chùi, sắp xếp hàng hóa (IO) xong rồi thì mới đến tiếp khách (blocking). Khách đến không ai tiếp thì khách không đến nữa. Trong lập trình, cô quên dặn rằng nếu có khách thì phải bỏ dở việc lau chùi mà tiếp khách (non-Blocking IO). Chuyện có vẻ nhạt nhẽo và phi lý nhưng cốt ý để trình bày hiện tượng asynchronously blocking. Trong trường hợp này cô Hoa là lập trình viên và anh Tư Ếch là hệ thống vi tính.

Đại khái lập trình của cô Hoa như dưới đây. Hàm shopKeeping bao gồm những hàm chi tiết khác. Hàm tiepKhach nằm dưới cùng. Trong một môi trường single thread aschynchronous hàm liệt kê trên cao phải hoàn tất (không thể bỏ dở công việc đang làm được gọi là blocking) thì hàm liệt kê dưới đó mới được quan tâm. Anh Tư chưa làm xong những hàm trên nên việc tiepKhach chưa đến phiên mặc dù khách đông và đang chờ.

function shopKeeping() {
    moCuaTiem();
    donDepLauChui();
    kiemKeHangHoa();
    tiepKhach();
}
shopKeeping();

Kỳ tới cô Hoa lại có việc đi xa, chúng ta để xem cô Hoa sẽ có biện pháp gì và có còn mướn anh Tư nữa không.

Bạn thấy bài viết này như thế nào?: 
Average: 2.2 (69 votes)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Tìm kiếm bất động sản

 

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
“Dám” tuyển kỹ sư Apple, nhân viên Google bị sa thải

“Dám” tuyển kỹ sư Apple, nhân viên Google bị sa thải

Việc này diễn ra ngay sau khi cố Tổng Giám đốc Apple, ông Steve Jobs, gửi email “cảnh báo” Giám đốc điều hành Eric Schmidt của Google.

Cựu nhân viên Google trở thành tân CEO của Yahoo!

Cựu nhân viên Google trở thành tân CEO của Yahoo!

Theo tờ thời báo New York, lãnh đạo lâu năm của Google sẽ bắt đầu dẫn dắt Yahoo! vượt qua khó khăn sau một loạt các rắc rối liên quan đến vị trí CEO của công ty.

Facebook công bố Scrapbook: góc nhỏ cha mẹ

Facebook công bố Scrapbook: góc nhỏ cha mẹ

Mới đây, Facebook đã chính thức tung ra tính năng Scrapbook, cho phép các bậc phụ huynh tạo ra một album ảnh riêng

Công ty diệt chuột T&C

 

Diet con trung