2011-08-09 50 views
7

Trong vài tuần qua, tôi đã học và thử nghiệm với Clojure và Erlang. Từ những gì tôi hiểu cả hai đều giải quyết cùng một loại vấn đề - nhưng - với các cách tiếp cận khác nhau. Nếu điều đó là đúng, thì Clojure có khả thi như một lựa chọn cho các hệ thống thời gian thực như các ứng dụng chat hay các nhà máy ticker, như Erlang không?Khả năng thời gian thực?

+3

Ứng dụng trò chuyện và nhà máy đánh dấu là thời gian thực mềm, có nghĩa là mọi ngôn ngữ sẽ hoạt động. –

Trả lời

6

cả địa chỉ lập trình đồng thời mặc dù trong môi trường khác nhau:

  • Clojure là thực sự tốt tại chia sẻ bộ nhớ đồng thời lập trình. Trường hợp có nhiều luồng tất cả làm việc trên một bộ nhớ lớn duy nhất (heap) và chúng cần phối hợp quyền truy cập vào các đối tượng được chia sẻ trong bộ nhớ đó.
  • Erlang thực sự tốt tại chia sẻ không có gì phân phối máy tính nơi các quá trình cần để có thể chạy trên nhiều máy tính và làm việc trên không gian bộ nhớ độc lập. Chúng không phối hợp quyền truy cập chia sẻ với các đối tượng.

Cả hai hệ thống này đều là "thời gian thực mềm" và rất phù hợp với những thứ như hệ thống trò chuyện và điều khiển mặc dù không phải hệ thống nào phù hợp với hệ thống có yêu cầu thời gian thực cứng.

+0

Cảm ơn lời giải thích. Theo dõi, từ những gì tôi đã đọc cho đến nay Erlang chào hàng thực tế rằng nó là quá trình (thread) quản lý là không phụ thuộc vào hệ điều hành, do đó bằng cách nào đó làm cho nó hiệu quả hơn/hiệu quả. Bạn có kinh nghiệm với điều này không? – kin1

+0

Bởi vì khả năng trực tiếp các chức năng đường ống trên mạng, erlang thực sự hiệu quả trên các mạng không đồng nhất, miễn là bạn có thể thực hiện công việc với thông điệp đi một mình –

7

Theo như Clojure đi, nó có thể cung cấp nhiều khả năng thời gian thực như Java VirtualMachine cơ bản có thể.

Bạn CAN tạo hệ thống thời gian thực cứng với JVM, nhưng điều này không chỉ vượt qua cú pháp ngôn ngữ mà Clojure cung cấp.

Tùy thuộc vào yêu cầu thời gian thực của bạn, có vẻ như bạn sẽ cần phải điều chỉnh các JVM (đây là một tốt IBM Works article hoặc sử dụng một JVM cụ thể như Erland Fiji JVM

Về, đã có một là liên quan questions on SO

ứng dụng trò chuyện và ticker thực vật có thể đạt được với cả hai ngôn ngữ, nhưng cá nhân tôi nghi ngờ nó sẽ được dễ dàng hơn để triển khai với Clojure, đặc biệt là nhìn vào cung cấp trong Cloud (Heroku) và dịch vụ lưu trữ thông thường.

1

Có, Clojure là một lựa chọn rất khả thi cho các ứng dụng thời gian thực (mềm).

Về cơ bản, bạn có thể nhận được hiệu suất thời gian thực tương đương với bất kỳ thứ gì khác trên JVM. Vì mọi người sử dụng JVM cho nền tảng giao dịch theo thời gian thực (ví dụ: These guys) thì tôi chắc chắn sẽ tốt cho trò chuyện hoặc cổ phiếu.

Clojure là đặc biệt tốt cho các ứng dụng cao đồng thời truy cập vào chia sẻ trạng thái, vì nó có một rất đẹp model of Software Transactional Memory rằng quy mô đặc biệt tốt với số lượng lớn các chủ đề/số lượng lớn các lõi. Tôi tin rằng có một video ở đâu đó của Rich Hickey thể hiện một ứng dụng Clojure đồng thời trên một hộp hệ thống Azul 768 lõi mà không có bất kỳ vấn đề gì.

Bạn có thể tương phản điều này với Erlang, được thiết kế cho các diễn viên được phân phối cao không chia sẻ trạng thái. Điều này mang lại cho Erlang các ứng dụng dư thừa và khả năng mở rộng lớn trên các cụm máy, nhưng mỗi quá trình sẽ quản lý trạng thái độc lập của chính nó.

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