Có sự khác biệt giữa sợi, coroutines và sợi màu xanh lá cây và nếu đó là như vậy thì nó là gì?


57

Hôm nay tôi đã đọc một số bài viết trên Internet về sợi, coroutine và sợi màu xanh lá cây, và có vẻ như những khái niệm này có rất nhiều điểm chung, nhưng có một số khác biệt nhỏ, đặc biệt là khi chúng ta nói về sợi và coroutines.

Có một tóm tắt ngắn gọn, chính xác về những gì làm cho họ khác nhau?

Cập nhật: Tôi thấy tài liệu Phân biệt coroutines và sợi (bản nháp N4024 C ++) đặc biệt tốt trong việc phân biệt giữa sợi và coroutines.

Câu trả lời:


106

Một sợi là sợi chỉ nhẹ mà sử dụng đa nhiệm hợp tác thay vì preemptive multitasking. Một sợi đang chạy phải "nhường" một cách rõ ràng để cho phép một sợi khác chạy, điều này làm cho việc thực hiện chúng dễ dàng hơn nhiều so với các luồng của người dùng hoặc hạt nhân.

Một Coroutine là một thành phần tổng quát hóa một chương trình con để cho phép nhiều điểm vào để tạm dừng và tiếp tục thực hiện tại các vị trí nhất định. Không giống như các chương trình con, các coroutine có thể thoát ra bằng cách gọi các coroutine khác, sau này có thể quay trở lại điểm mà chúng được gọi trong coroutine ban đầu.

Một chủ đề Xanh là một chủ đề đó được lên kế hoạch bởi một máy ảo (VM) thay vì natively bởi hệ điều hành cơ bản. Các luồng xanh mô phỏng các môi trường đa luồng mà không cần dựa vào bất kỳ khả năng nào của hệ điều hành gốc và chúng được quản lý trong không gian người dùng thay vì không gian kernel, cho phép chúng hoạt động trong các môi trường không có hỗ trợ luồng gốc.


13
Tôi chỉ có thể nói cho chính mình - câu trả lời này rất có giá trị với tôi. Tôi chia sẻ ý kiến ​​với Robert về điều này.
DejanLekic

"Tóm tắt các chủ đề rộng là đặc sản của Wikipedia, được tập trung và tối ưu hóa để cung cấp nội dung này và thúc đẩy văn hóa hướng đến nó. Mọi người sẵn sàng, có khả năng và kinh nghiệm tốt nhất trong việc cung cấp các bản tóm tắt như vậy cho Wikipedia, không phải vào Stack Exchange ... . Những người tìm kiếm điều này trong công cụ tìm kiếm thường được trình bày hai ví dụ nội dung cạnh tranh trực tiếp, một tại mạng SE, một tại Wikipedia ... Vì những lý do đã đề cập ở trên, rất có thể nội dung SE sẽ kém hơn so với ... "
gnat

Lưu ý, coroutines và sợi có thể được coi là có liên quan khá chặt chẽ - thậm chí có thể giống nhau. Nếu một người muốn coroutines, họ có thể được thực hiện thông qua các sợi với rất ít nỗ lực và ngược lại.
cHao

9
Không giải thích chúng khác nhau như thế nào. Tất cả những định nghĩa này có vẻ khá tương đương.
hasen

1
@gstackoverflow: Các luồng Java là các luồng OS. JVM lên lịch cho chúng thông qua HĐH.
Robert Harvey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.