Có, tạo và sử dụng ngữ cảnh thực thi khác trong ứng dụng của bạn chắc chắn là một ý tưởng hay.
Ngữ cảnh thực thi sẽ môđun hóa mô hình đồng thời của bạn và cách ly các phần khác nhau của ứng dụng, để nếu có sự cố trong ứng dụng của bạn, các phần khác sẽ ít bị ảnh hưởng hơn. Để xem xét ví dụ của bạn, bạn sẽ có một bối cảnh thực hiện khác nhau cho các hoạt động cụ thể DB và một số khác để nói, xử lý các yêu cầu web.
Trong this presentation bởi Jonas Boner mẫu này được gọi là tạo "Vách ngăn" trong ứng dụng của bạn để có độ ổn định cao hơn & khả năng chịu lỗi.
Tôi phải thừa nhận rằng mình chưa nghe nhiều về việc sử dụng ngữ cảnh thực thi. Tuy nhiên, tôi thấy nguyên tắc này được áp dụng trong một số khuôn khổ. Ví dụ: Play sẽ sử dụng các ngữ cảnh thực thi khác nhau cho các loại công việc khác nhau và chúng khuyến khích bạn chia nhiệm vụ của mình thành các nhóm khác nhau nếu cần: Play Thread Pools
Phần mềm trung gian Akka cũng gợi ý chia ứng dụng của bạn thành các ngữ cảnh khác nhau ứng dụng của bạn. Họ sử dụng khái niệm Dispatcher là ngữ cảnh thực thi trên pin.
Ngoài ra, hầu hết các toán tử trong thư viện đồng thời scala đều yêu cầu ngữ cảnh thực thi. Điều này là do thiết kế để cung cấp cho bạn sự linh hoạt bạn cần khi mô đun hóa ứng dụng của bạn đồng thời-khôn ngoan.
Nguồn
2013-05-30 11:32:03
+1 để đề cập đến yếu tố quyết định quan trọng là liệu bạn có sử dụng mã chặn (hoặc chạy dài) trong tương lai hay không. Nếu bạn không, sử dụng ngữ cảnh thực thi riêng biệt thực sự là phản tác dụng. –
Nếu bạn muốn một trình điều khiển tùy chỉnh mà bạn có thể kiểm soát nhưng muốn gắn bó với tính song song mặc định và các tham số khác, có vẻ như 'ExecutionContext.fromExecutor (new scala.concurrent.forkjoin.ForkJoinPool)' (không có tham số) dường như làm ; tạo ra một hồ bơi của 8 trên i7 của tôi với 8 lõi (incl. hyperthreading), phù hợp với những gì 'ForkJoinPool.commonPool' chứa. –
@cmbaxter bạn có bao bọc các cuộc gọi JDBC của bạn trong 'chặn {}' bên trong tương lai không? Là nó cần thiết nếu có một ExecutionContext tách ra? –