Tôi đã theo dõi khả năng hiển thị ngày càng tăng của các ngôn ngữ lập trình chức năng và các tính năng trong một thời gian. Tôi đã xem xét chúng và không thấy lý do kháng cáo.
Sau đó, gần đây tôi đã tham dự buổi thuyết trình "Khái niệm cơ bản về Erlang" của Kevin Smith tại Codemash .
Tôi rất thích bài thuyết trình và biết rằng rất nhiều thuộc tính của lập trình hàm giúp tránh các vấn đề về luồng / đồng thời dễ dàng hơn nhiều. Tôi hiểu việc thiếu trạng thái và khả năng thay đổi khiến nhiều luồng không thể thay đổi cùng một dữ liệu, nhưng Kevin cho biết (nếu tôi hiểu đúng) tất cả giao tiếp diễn ra thông qua các tin nhắn và các tin nhắn được xử lý đồng bộ (tránh các vấn đề đồng thời).
Nhưng tôi đã đọc rằng Erlang được sử dụng trong các ứng dụng có khả năng mở rộng cao (toàn bộ lý do Ericsson tạo ra nó ngay từ đầu). Làm thế nào nó có thể xử lý hiệu quả hàng nghìn yêu cầu mỗi giây nếu mọi thứ được xử lý như một thông báo được xử lý đồng bộ? Đó không phải là lý do tại sao chúng tôi bắt đầu chuyển sang xử lý không đồng bộ - để chúng tôi có thể tận dụng lợi thế của việc chạy nhiều luồng hoạt động cùng một lúc và đạt được khả năng mở rộng? Có vẻ như kiến trúc này, mặc dù an toàn hơn, nhưng lại là một bước lùi về khả năng mở rộng. Tôi đang thiếu gì?
Tôi hiểu những người tạo ra Erlang đã cố ý tránh hỗ trợ phân luồng để tránh các vấn đề đồng thời, nhưng tôi nghĩ đa luồng là cần thiết để đạt được khả năng mở rộng.
Làm thế nào để ngôn ngữ lập trình chức năng có thể an toàn theo luồng, nhưng vẫn mở rộng quy mô?