2011-11-21 15 views
20

trong ứng dụng của tôi, tôi phải giải quyết một vấn đề bằng cách thực hiện nhiều nhiệm vụ ràng buộc mạng-io và đôi khi một nhiệm vụ ràng buộc io và được chia thành các nhiệm vụ ràng buộc io nhỏ hơn. Các tác vụ này hiện đang được thực hiện bằng cách sử dụng cơ chế threadpool chuẩn của Java. Tôi tự hỏi liệu tôi có thể chuyển sang khuôn khổ ngã ba và tham gia không? Nhưng câu hỏi đặt ra là, khuôn khổ forkandjoin thường được sử dụng để giải quyết các hoạt động liên kết io hoặc CPU bị ràng buộc? Tôi cho rằng chúng chủ yếu là cho các hoạt động liên kết CPU khiến framework fork-and-join sử dụng kỹ thuật trộm cắp công việc để sử dụng các bộ vi xử lý đa nhân, nhưng nếu tôi sử dụng nó cho các nhiệm vụ liên kết IO, sẽ có bất kỳ tác động bất lợi nào không?Có phải hồ bơi thread fork-and-join của Java là tốt cho việc thực thi nhiệm vụ bị ràng buộc IO không?

+0

"Tốt" theo tiêu chí nào? Những loại I/O nào? Mạng? Đĩa? Console? GUI? Là ngã ba và tham gia thực sự là một 'hồ bơi thread'? – EJP

+0

nhiệm vụ ràng buộc mạng io của nó. – Shamik

+0

câu hỏi sâu sắc; upvoted – necromancer

Trả lời

23

Fork-join được thiết kế cho các tác vụ tính toán, vì vậy thông thường tôi sẽ nói không. Fork-join có một API (ManagedBlocker api) để nói cho khung FJ rằng luồng của bạn sẽ bị chặn trong một thời gian và không xếp hàng nhiệm vụ mới nhưng nó thực sự được thiết kế để chờ đợi ngắn (như lấy khóa), không tùy ý lâu chờ IO.

Chúng tôi có hệ thống sử dụng tính năng kết nối ngã ba và chúng tôi thực hiện các tác vụ liên quan đến IO đến một nhóm thực thi riêng biệt. Khi dữ liệu đến, nó kích hoạt các tác vụ vào nhóm kết nối ngã ba sao cho chỉ có công việc ràng buộc CPU xảy ra ở đó.

2

Nếu bạn đang cố gắng giải quyết khía cạnh "I/O bị ràng buộc" của sự cố, tôi nghi ngờ rằng việc chuyển từ chuỗi chuẩn sang ngã ba và tham gia sẽ cải thiện mọi thứ ... giả sử bạn đã triển khai giải pháp dựa trên luồng hiện tại đúng cách. (Và dựa trên câu trả lời của Alex Miller, việc chuyển đổi có thể thực sự làm mọi thứ trở nên tồi tệ hơn.)

Hoặc cách khác để làm cho ứng dụng I/O bị ràng buộc nhanh hơn là giải quyết các vấn đề xảy ra/O bị ràng buộc ... hoặc tăng băng thông I/O của hệ thống của bạn.

1

có vẻ như không phải là một lợi thế hấp dẫn để kết nối ngã ba trong trường hợp này.

không có vẻ là một bất lợi đáng kể bởi vì bạn sẽ không lái xe một số tài nguyên quá khó.

tất cả trong tất cả, tôi sẽ ở lại với nhóm chủ đề cho đến khi bạn không có sự phát triển quan trọng nào khác để thực hiện.

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