Khác nhau giữa lập trình bất đồng bộ và đa luồng trong c#?

Bài toán mà async giải quyết không phải là thực thi task nhanh hơn, mà là scale tốt hơn, phục vụ nhiều client hơn khi mà tài nguyên thread có giới hạn.

Đúng rồi vì vậy nên phải kết hợp Thread Pool với 1 main thread đó, chứ 1 thread mà async thì lúc trả response cũng bằng sync à @@

Đúng rồi, async sử dụng threadpool mà. Với sync nếu có 100 thread trong threadpool thì client thứ 101 phải chờ. Còn async thì 100 thread có thể phục vụ 120 client ( ví dụ vậy), vì trong lúc chờ kết quả trả về thì thread đó đã tranh thủ phục vụ client khác rồi!

Một cái CPU 2 core 4 thread thì nó cũng chỉ là 4 thread thôi, cái đống thread do hệ điều hành cung cấp cho app nó cũng tương tự như async trên thread thật. Chứ chả nhẽ cái máy tính chỉ làm được 4 việc cùng lúc, thế thì chết à.

Bạn cứ hiểu đơn giản async trong C# chỉ được dùng khi tác vụ cần thực hiện có thời gian đợi lâu, thường là mấy cái tác vụ kiểu response/request giữa máy chủ vs client, giải pháp này giúp tận dụng khoảng thời gian nhàn rỗi đợi chờ của luồng để cho nó làm việc khác vậy đó (cái này giống NodeJS :vvvv)

2 Likes

Vậy theo bạn là nhiều đầu bếp mỗi đầu bệp làm 1 món à, v là đa luồng hay đơn luồng. nếu đơn luồng như javascript thì sao.

javascript đơn luồng như bên dưới là javascript v8 engine là đa luồng nha bạn.
image
native code ở đây chính là đa luồng của engine

Ví dụ đơn giản nhất là ngay trên CPU 1 core, bạn vừa có thể download (blocking) và serve nginx tại cùng 1 thời điểm mặc dù download task là I/O bound.
Theo mình biết nginx xử lý async tất cả request dựa vào select, poll, kqueue, epoll …
Ví dụ chính xác cho blocking I/O đó là apache prefork. n request apache phải sinh n thread. Giá trị này chính là Maxclients

Theo mình thì nó nên hiểu như này cho đơn giản

Chia 1 chương trình thành n function. Và cần thực thi n function cùng lúc

Bất đồng bộ:
_ Thread cần: 1

Đồng bộ:
_ Thread cần: n

Tìm hiểu sâu về cách mà async làm việc, có thể tham khảo libuv, một thư viện đa nền xử lý async

Cái bạn nói là cách nginx chia sẻ tài nguyên CPU cho các request bên trong 1 nginx process. Còn việc mình nói là kernel quản lý CPU cho các applications khác nhau và nginx là 1 application trong số đó.

thực ra mình đang quan tâm về javascript đơn luồng nó chạy ntn, thanks

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?