Tôi không biết liệu tôi có thể gọi kỹ thuật này là "làm việc ăn cắp" hay không nhưng thực sự OmniThreadLibrary giữ cho tất cả các lõi của bạn bận rộn khi thực hiện việc trừu tượng Fork/Join.
Khi bạn sử dụng Ngã ba/Tham gia, bạn gửi công việc vào nhóm tính toán bằng cách gọi Compute
. Khi bạn gọi Value
để có được kết quả của subcomputation hoặc Await
để chờ trên subcomputation để hoàn thành và subcomputation đã không hoàn thành công việc của nó được nêu ra, Value
/Await
sẽ mất một nhiệm vụ từ hồ bơi tính toán và thực hiện nó. Khi nhiệm vụ mới này được hoàn thành, nó sẽ kiểm tra lại xem subcomputation đã hoàn thành công việc của nó chưa và nếu không nó sẽ xử lý subtask tiếp theo.
Cơ chế này được mô tả thêm trên OmniThreadLibrary wiki.
EDIT
Tôi không nghĩ Fork/Tham cách tiếp cận nên được gọi là "tác phẩm ăn cắp". Trong triển khai OmniThreadLibrary, mục công việc không bao giờ được gán cho một luồng cho đến khi luồng bắt đầu thực hiện nó. Và một khi thread bắt đầu thực hiện nó, không ai có thể ăn cắp nó vì sẽ không có mục đích trong đó.
Đơn vị OtlParallel đã đề cập đến điều này và cũng xem bài đăng trên blog này: http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala
Shamballa, bài viết này mô tả về ForEach trừu tượng, không phải Fork/Join. – gabr
Tôi rất tiếc, tôi nên đọc câu hỏi chậm hơn và hiểu rõ hơn. – Shambhala