QUESTIONS? CALL: (+84) 24 666 026 12

HiveTech Solutions

HiveTech Solutions

HiveTech is a technology company focus on AI and big data technologies for educational purposes.

T (+84) 24 666 026 12
Email: contact@hivetech.vn

HiveTech JSC
No. 98 Hoang Quoc Viet Str, Cau Giay Dist, Ha Noi

Open in Google Maps
  • HOME
  • SERVICES
  • OUR MISSIONS & VALUES
  • PARTNERS
  • CONTACT
  • NEWS & EVENTS
  • RECRUITMENTS
  • Home
  • Posts
  • Asynchronous programming. Blocking I/O and non-blocking I/O
2023-05-31

Asynchronous programming. Blocking I/O and non-blocking I/O

by Thao Nguyen / Friday, 08 October 2021 / Published in Posts, Technology

Mỗi khi có một câu hỏi về blocking hoặc non-blocking calls, thì gần như đó là vấn đề xoay quanh việc xử lý quá trình input/output (I/O). Hãy tưởng tượng rằng bạn khi bạn đang lướt web (web browser hoặc một app bạn đang sử dụng là một client) thì ở đâu đó có một server đang xử lý request bạn gửi đi và sinh ra những dòng chữ mà bạn đang đọc ở đây.

Để có sự tương tác giữa client-server như vậy thì cả client và server phải thiết lập kết nối với nhau. Chúng ta sẽ không đi sâu vào mô hình 7 tầng hay là protocol stack có liên quan đến quá trình tương tác này, mà chúng ta sẽ tìm hiểu thêm về những điểm kết nối đặc biệt như sockets, cách mà client và server ràng buộc với nhau, lắng nghe và hiểu được nhau.

Có 2 cách để tổ chức I/O: blocking và non-blocking

Và quá trình I/O cũng có 2 loại: đồng bộ (synchronous) và bất đồng bộ (asynchronous )

Blocking I/O

        Với blocking I/O, khi client tạo một connection request đến server thì socket chịu trách nhiệm kết nối và luồng đọc dữ liệu tương ứng sẽ bị blocked lại cho đến khi có một vài dữ liệu đã được xử lý xong xuất hiện. Những dữ liệu này được đặt ở hàng chờ network cho đến khi nào nó được đọc và sẵn sàng để xử lý. Cho đến lúc quá trình hoàn thành, server không thể làm gì thêm khác ngoài việc chờ đợi. Vì vậy, ta không thể xử lý nhiều hơn một connection trong đơn luồng. Mặc định thì TCP sockets là blocking mode.

Non-Blocking I/O

Tuy nhiên, chúng ta có cơ chế thứ hai: non-blocking – thay vì bị block mọi request sẽ được đưa lên hàng đợi ngay lập tức, xử lý và trả ra kết quả. Quá trình I/O thực sự sẽ tiến hành vào lúc khác. Chúng ta có thể kết nối với một non-blocking socket khi mà nó không có dữ liệu, kết quả trả ra sẽ là error code.

Thực ra cách này cũng không tốt lắm, nếu chương trình có một bộ dữ liệu lớn thì sẽ tốn rất nhiều tài nguyên của CPU. Chế độ này có thể sẽ không hiệu quả trong trường hợp ứng dụng phải đợi có dữ liệu trước sau đó mới thực thi một số việc khác

Bù lại chúng ta có thể thực hiện nhiều quá trình I/O khác nhau với các socket khác nhau từ cùng một luồng một cách đồng thời. Cơ chế polling readiness mechanism sẽ giúp chúng ta biết được socket nào sẵn sàng để thực hiện I/O operation mới. Dựa vào cơ chế này, mỗi khi một socket nào sẵn sàng sẽ được đưa lên hàng đợi và thực hiện, sau đó socket được chuyển sang chế độ blocking cho đến khi nó sẵn sàng để thực hiện quá trình I/O tiếp theo.

  • Tweet
Tagged under: Blocking I/O, Non-Blocking I/O

About Thao Nguyen

What you can read next

HIVETECH CHÚC MỪNG NGÀY QUỐC TẾ PHỤ NỮ 08/03
10 xu hướng kinh doanh và công nghệ năm 2021
Duy trì 8 thói quen giúp bạn cải thiện trí nhớ hiệu quả

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Thực Tập Sinh Nhân Sự Tổng Hợp

    1. Mô Tả Công Việc Hỗ trợ các công việc hành ch...
  • DevOps Engineer (AWS/Azure/GCP)

    1. Mô Tả Công Việc Nghiên cứu, xây dựng và triể...
  • Tester/Quality Assurance Engineer

    1. Mô Tả Công Việc Tham gia các dự án có domain...
  • Giảng Viên Tiếng Anh nội bộ

    1. Mô Tả Công Việc Trực tiếp tham gia giảng dạy...
  • CHỦ TỊCH HIVETECH VIỆT NAM NGÔ THÀNH LÊ: “HÃY TRỞ THÀNH MỘT NHÂN VIÊN GIỎI TRƯỚC KHI KHỞI NGHIỆP”

    Từ bỏ vị trí công việc ổn định tại doanh nghiệp...

Recent Comments

  • hivequeen on Intern/Fresher ReactJS/VueJS Developer
  • Khuất Anh Tuấn on Intern/Fresher ReactJS/VueJS Developer

Archives

  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • March 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • November 2019
  • September 2019
  • July 2019
  • June 2019

Categories

  • Mobile
  • Networking
  • Posts
  • Recruitment
  • Sale
  • Technology
  • Uncategorized

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Featured Posts

  • Thực Tập Sinh Nhân Sự Tổng Hợp

    0 comments
  • DevOps Engineer (AWS/Azure/GCP)

    0 comments
  • Tester/Quality Assurance Engineer

    0 comments
  • Giảng Viên Tiếng Anh nội bộ

    0 comments
  • CHỦ TỊCH HIVETECH VIỆT NAM NGÔ THÀNH LÊ: “HÃY TRỞ THÀNH MỘT NHÂN VIÊN GIỎI TRƯỚC KHI KHỞI NGHIỆP”

    0 comments
  • DISCLAIMER
  • SUPPORT POLICY
  • LEGAL
HiveTech Solutions

© HiveTech 2019 All rights reserved

TOP