2013-07-05 21 views
11

Trong cuốn sách về Communicating Sequential Processes, cần dành nhiều thời gian để xác định các sự kiện, không có hướng và có thể liên quan đến nhiều quy trình độc lập.Tại sao việc triển khai CSP chỉ bao gồm các kênh?

Chỉ trong chương 4 là các kênh được giới thiệu, được hướng dẫn và liên quan đến 2 quy trình.

Tuy nhiên, tất cả các triển khai của CSP bao gồm occam, Go, LuaCSP và clojure.core.async chỉ triển khai kênh.

Mặc dù hầu hết các vấn đề thực tế có thể được giải quyết bằng các kênh (phát sóng), tôi tự hỏi tại sao cuốn sách dành quá nhiều thời gian cho chúng trong khi không ai sử dụng chúng.

Trả lời

2

Trong Occam-pi, các rào cản là một phụ trợ quan trọng cho các kênh. Với một rào cản, mỗi quá trình ghi danh chờ đợi trên hàng rào cho đến khi họ đã làm tất cả như vậy. Tại thời điểm này tất cả đều được phát hành. Đây là một ví dụ về một sự kiện CSP không phải dạng kênh.

Occam-pi cũng có một điểm hẹn mở rộng bằng cách sử dụng các kênh. Đây là một mô hình sử dụng kênh khá khác, rất giống với điểm hẹn ở Ada.

+0

Đây có phải là khái niệm giống như CyclicBarrier trong Java không? http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html – Pepijn

+0

Tôi nghĩ chúng rất giống nhau về khái niệm. Tôi không biết liệu chúng có giống nhau hay không. Hàng rào Occam-Pi có hiệu suất cao (như tất cả các nguyên thủy đồng bộ hóa). –

9

Đầu tiên là tất cả các cuốn sách happened before việc triển khai. Do đó, câu hỏi của bạn được xây dựng tốt hơn là:

Tại sao việc triển khai CSP không tập trung chủ yếu vào các sự kiện mặc dù cuốn sách nhấn mạnh chúng rất nhiều.

Về cơ bản, làm cho sự kiện là công dân hạng nhất của một ngôn ngữ mang lại độ đặc hiệu sử dụng nhất định có thể quá hẹp đối với số general purpose programming language.

Ngoài ra, bạn có thể dễ dàng triển khai sự kiện trên kênh (và các cấu trúc khác), trong trường hợp bạn vào event driven programming.

+2

Nhận xét thứ hai này mang tính chất sơ bộ. CSP và kênh tự nhiên cung cấp một phong cách hướng sự kiện. Sự khác biệt là các kênh * không * yêu cầu gọi lại để xử lý các sự kiện. –

+1

Khóa/mở khóa nhiều hơn các sự kiện. Thứ được truyền qua kênh có thể là bất cứ thứ gì. – thwd

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