Trước hết, tôi đồng ý với câu trả lời đúng của OPINION về việc học Erlang. Đó là ngôn ngữ chủ yếu là chức năng (mặc dù đồng thời đóng vai trò lớn) và tất cả các tính năng của nó đã được thêm vào để hướng tới khả năng chịu lỗi và độ mạnh, không hoàn toàn giống với mục tiêu thiết kế như Javascript ở nơi đầu tiên.
Thứ hai, việc để Node.js vào Erlang là một chút thất lạc. Node.js là một máy chủ / khung duy nhất thực hiện mọi thứ theo cách hướng sự kiện với sự trợ giúp của các cuộc gọi lại. Erlang có khung riêng (OTP), nhưng nó không ở cùng cấp độ.
Nếu bạn có kế hoạch học Erlang, tôi đề nghị mục blog của tôi Thư mở cho người mới bắt đầu Erlang (hoặc Onlooker) là phần giới thiệu đọc trước khi đi sâu vào hướng dẫn.
Điều duy nhất bạn có thể so sánh Erlang và Node.js về mặt mô hình và cách sử dụng là cách chúng được điều khiển theo sự kiện. Tuy nhiên, có hai sự khác biệt lớn ở đây. Mô hình của Node.js dựa trên các cuộc gọi lại bị ràng buộc với các sự kiện. Erlang dựa trên hàng đợi tin nhắn và nhận chọn lọc. Ý nghĩa trong đó là gì?
Trước hết, nếu bạn thực hiện mọi thứ theo cách gọi lại, cách duy nhất bạn mang theo trạng thái là đưa nó ra toàn cầu hoặc tham gia vào lập trình kiểu tiếp tục. Thứ hai, bạn phải tự chăm sóc cho ma trận sự kiện đầy đủ. Một ví dụ về điều này là nếu chúng ta tưởng tượng ra một cỗ máy trạng thái hữu hạn rất đơn giản: một semaphore mutex, hướng sự kiện.
Semaphore mutex có hai trạng thái: khóa và miễn phí. Bất cứ khi nào một đơn vị tính toán nhất định (worker, process, function hoặc thread) muốn có quyền truy cập vào mutex, nó phải kích hoạt một sự kiện cho biết 'Tôi quan tâm'. Bây giờ bạn phải quan tâm đến các loại sự kiện sau:
- Mutex là miễn phí và bạn yêu cầu lấy khóa
- Mutex bị khóa bởi người khác và bạn muốn lấy khóa
- Mutex bị khóa bởi chính bạn và bạn muốn giải phóng mutex
Sau đó, bạn có các sự kiện bổ sung để xem xét, chẳng hạn như hết thời gian để tránh bế tắc:
- Mutex đã bị khóa và bạn chờ đợi quá lâu, đồng hồ bấm giờ sẽ từ bỏ đám cháy
- Mutex đã bị khóa và bạn đợi quá lâu, lấy được khóa, sau đó hết thời gian chờ
Sau đó, bạn cũng có các sự kiện ràng buộc:
- bạn chỉ khóa mutex trong khi một số công nhân mong đợi nó được miễn phí. Bây giờ truy vấn của công nhân phải được xếp hàng để khi rảnh, nó được xử lý lại
- Bạn cần làm cho tất cả các công việc không đồng bộ
Ma trận sự kiện trở nên phức tạp rất nhanh. FSM của chúng tôi ở đây chỉ có 2 tiểu bang. Trong trường hợp Erlang (hoặc bất kỳ ngôn ngữ nào có nhận và chọn không đồng bộ với các sự kiện có khả năng đồng bộ), bạn phải quan tâm đến một vài trường hợp:
- Mutex là miễn phí và bạn yêu cầu lấy khóa
- Mutex bị khóa bởi người khác và bạn muốn lấy khóa
- Mutex bị khóa bởi chính bạn và bạn muốn giải phóng mutex
Và đó là nó. Bộ hẹn giờ được xử lý trong các trường hợp tương tự như việc nhận được thực hiện và đối với mọi việc phải làm với 'đợi cho đến khi nó miễn phí', các tin nhắn sẽ tự động được xếp hàng: nhân viên chỉ phải chờ trả lời. Mô hình là nhiều, đơn giản hơn nhiều trong những trường hợp này.
Điều này có nghĩa là trong các trường hợp chung, các mô hình dựa trên CPS và gọi lại như mô hình trong node.js yêu cầu bạn phải rất thông minh trong cách xử lý các sự kiện hoặc yêu cầu bạn xử lý toàn bộ ma trận sự kiện phức tạp, bởi vì bạn phải được gọi lại cho từng trường hợp không quan trọng xuất phát từ các vấn đề thời gian kỳ lạ và thay đổi trạng thái.
Nhận có chọn lọc thường cho phép bạn chỉ tập trung trong một nhóm nhỏ của tất cả các sự kiện tiềm năng và cho phép bạn suy luận dễ dàng hơn nhiều về các sự kiện trong trường hợp đó. Lưu ý rằng Erlang có một hành vi (mẫu thiết kế / triển khai khung) của một cái gì đó được gọi gen_event
. Việc triển khai gen_event cho phép bạn có một cơ chế rất giống với những gì đang được sử dụng trong node.js nếu đó là những gì bạn muốn.
Sẽ có những điểm khác biệt chúng; Erlang có khả năng lập lịch ưu tiên trong khi node.js hợp tác, Erlang thích hợp hơn với một số ứng dụng quy mô lớn (phân phối và tất cả), nhưng Node.js và cộng đồng của nó thường có nhiều thông tin và hiểu biết về xu hướng web mới nhất. Đó là một câu hỏi về việc chọn công cụ tốt nhất và điều này sẽ phụ thuộc vào nền tảng của bạn, loại vấn đề và sở thích của bạn. Trong trường hợp của tôi, mô hình của Erlang rất phù hợp với cách suy nghĩ của tôi. Đây không phải là trường hợp cho tất cả mọi người.
Hi vọng điêu nay co ich.