Đồng thời, song song, bất đồng bộ, non-blocking và các khái niệm liên quan
(black7375.tistory.com)Bắt đầu từ phần tổng hợp thuật ngữ đơn giản, bài viết mở rộng phạm vi đến cả đồ họa và bán dẫn.
- Thuật ngữ
- Đồng thời / song song
- Bất đồng bộ / non-blocking
- Tiền nhiệm / không tiền nhiệm
- Hệ điều hành và bộ xử lý
- Hệ điều hành
- Bộ xử lý
- Coroutine và fiber
- Fiber
- Coroutine
- Generator, Async/Await, continuation
- Generator
- Async / Await
- Continuation
- Promise và Future
- I/O multiplexing
- Multiplexing
- Socket
- Các mô hình I/O
- Ring buffer, các mô hình I/O hiện đại, LMAX Disruptor
- Ring buffer
- Các mô hình I/O hiện đại
- LMAX Disruptor
- Các primitive đồng bộ hóa
- Sự cần thiết
- Thread safety
- Spinlock
- Mutex
- Semaphore
- STM
- GIL
- Cách tiếp cận của các ngôn ngữ script khác và các mẫu Reactor/Proactor
- Ractor (Ruby)
- Node.js (mẫu Reactor)
- Mẫu Proactor
- CSP và actor
- CSP
- Actor
- Green thread, goroutine và các công nghệ runtime bất đồng bộ hiện đại
- Green thread
- Các runtime CSP hiện đại
- Các runtime actor hiện đại
- Song song hóa
- SIMD và pipelining
- OpenMP & MPI
- Các kỹ thuật song song hiện đại
- Kiến trúc lambda
- GPU
- Pipeline và shader
- Màn hình
- Buffering
- Đồng bộ dọc
- Frame pacing và beam racing
- Compositor
- API / thư viện đồ họa
- Các loại chip khác
- Tổng quan
- DSP
- FPGA
- TPU
- Tài liệu tham khảo
10 bình luận
Tôi thấy câu này được lặp lại y hệt trên vô số blog, nên tò mò không biết nguồn gốc ban đầu là từ đâu.
Phần lớn các blog mải tham chiếu lẫn nhau nên tôi không thể đoán ra nguyên văn gốc, và thứ duy nhất tôi tìm được là tài liệu AIO của IBM, nhưng có vẻ như tài liệu này chỉ nói trong phạm vi kernel I/O mà thôi. Ngoài ra tôi cũng nghe nói chính cách phân biệt đó tự thân đã gây tranh cãi.
Đây có phải là một tiêu chí phán định có độ tin cậy cao không?
Trước hết, có lẽ có thể dựa trên phía mạch điện để hiểu đồng bộ/bất đồng bộ.
Mạch đồng bộ dùng xung nhịp để căn thời gian, còn mạch bất đồng bộ được kích hoạt bởi sự kiện hoặc đầu vào khác.
Tức là, cũng không quá gượng ép nếu định nghĩa API bất đồng bộ là cách thức được kích hoạt bởi callback hoặc tương tự như vậy.
https://developer.mozilla.org/en-US/docs/…
Với API blocking/non-blocking, có thể xem định nghĩa phù hợp là liệu có bắt buộc phải chờ tác vụ hoàn thành hay không.
Tuy nhiên, để không phải chờ thì cần có một cách triển khai mà hàm được gọi nắm quyền điều khiển, nên có vẻ người ta thường giải thích theo hướng đó nhiều hơn.
https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
Tôi đã lược bớt phần này để đi nhanh cho gọn, nhưng sẽ thử bổ sung thêm nội dung này.
Tôi đồng ý với tất cả những gì bạn đã nói. Tuy nhiên, tôi vẫn khó có thể thực sự chắc chắn về việc liệu có nên vẽ hai trục tiêu chí này trên một mặt phẳng chia thành bốn góc phần tư hay không, liệu có thể vẽ như vậy hay không, và liệu chúng có được phân tách một cách phù hợp hay không. Với tôi,
BlockingvàSyncvề mặt khái niệm có cảm giác chia sẻ 90% cùng một ngữ cảnh.Non-Blocking&Asynccũng vậy.Dù Blocking-Sync và Non-Blocking-Async thường được dùng cùng nhau, vẫn có những trường hợp cần phân biệt rõ.
selectVì vậy, tôi lại cho rằng nên phân biệt và sử dụng chúng tách bạch.
Có vẻ như tôi gần như không hiểu các ví dụ mà bạn nêu ra, nên cũng khó đồng cảm hơn.
Bài viết này giải thích như sau:
Tôi muốn biết bạn có ý kiến gì về điều này. Thật ra đến thời điểm này, tôi cảm thấy cách phân loại 2x2 này không còn nhiều ý nghĩa nữa. Có vẻ như tùy theo từng domain và từng góc nhìn mà cách diễn giải lại rất khác nhau.
Wow, cảm ơn vì tài liệu rất hay.
Đọc rất hay!
Cuộn mãi không thấy điểm dừng luôn, run thật đấy.
Có vẻ cũng đáng đọc thử một lần cuốn sách "7 mô hình đồng thời" nói về chủ đề tương tự.
So sánh mục lục thì thấy khá giống nhau.
Có vẻ là một cuốn sách hay.