2012-07-06 28 views
5

Ăn cắp công việc là ví dụ có sẵn trong khung Fork/Join trên nền tảng Java. (Xem How is the fork/join framework better than a thread pool?) - là một cái gì đó tương tự có thể với OmniThreadLibrary?OmnithreadLibrary có hỗ trợ "đánh cắp công việc" không?


làm việc ăn cắp: nhân đề mà chạy ra khỏi điều cần làm nhiệm vụ có thể ăn cắp từ đề khác mà vẫn còn bận rộn.

+0

Đơ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

+0

Shamballa, bài viết này mô tả về ForEach trừu tượng, không phải Fork/Join. – gabr

+1

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

Trả lời

6

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 đó.

Các vấn đề liên quan