Nó không đến nỗi mô hình diễn viên sẽ thay thế chủ đề; ở cấp độ cpu, các quá trình sẽ vẫn có nhiều luồng được lên lịch và chạy trên lõi bộ xử lý. Ý tưởng của các diễn viên là thay thế sự phức tạp cơ bản này bằng một mô hình mà, những người ủng hộ của nó lập luận, làm cho các lập trình viên viết mã đáng tin cậy dễ dàng hơn.
Ý tưởng của diễn viên là phải có các luồng kiểm soát riêng biệt (các quy trình trong ngữ cảnh Erlang) giao tiếp độc quyền bằng cách truyền thông điệp. Một mô hình lập trình truyền thống hơn sẽ là chia sẻ bộ nhớ, và phối hợp truyền thông giữa các chủ đề bằng cách sử dụng mutexes. Điều này vẫn xảy ra dưới bề mặt trong mô hình diễn viên, nhưng các chi tiết được trừu tượng đi, và lập trình viên được đưa ra các nguyên thủy đáng tin cậy dựa trên thông điệp đi qua.
Một điểm quan trọng là các diễn viên không nhất thiết phải ánh xạ 1-1 đến chủ đề - trong trường hợp của Erlang, họ chắc chắn không - thường sẽ có nhiều quy trình Erlang trên mỗi luồng hạt nhân. Vì vậy, có phải là một lịch trình mà chỉ định diễn viên cho các chủ đề, và chi tiết này cũng trừu tượng ra khỏi lập trình ứng dụng.
Nếu bạn quan tâm đến mô hình diễn viên, bạn có thể muốn xem xét cách hoạt động trong Erlang hoặc Scala.
Nếu bạn quan tâm đến các loại nóng đồng thời mới, bạn có thể muốn xem software transactional memory, một cách tiếp cận khác có thể tìm thấy trong clojure và haskell.
Có thể nói rằng nhiều nỗ lực tích cực hơn trong việc tạo mô hình đồng thời nâng cao dường như đang diễn ra bằng các ngôn ngữ chức năng.Có thể là do niềm tin (tôi tự mình uống một số kool-aid này) sự bất biến đó làm cho sự tương tranh dễ dàng hơn nhiều.
Nguồn
2010-04-02 05:15:41
Tôi muốn đi xa hơn và nói rằng sự bất biến làm tăng độ mạnh của hệ thống. Tương tranh là một chiều kích của sự phức tạp của phần mềm, nơi sự khác biệt về độ mạnh là rất rõ ràng. Các hệ thống rất phức tạp có thể hưởng lợi từ việc sử dụng bất biến ngay cả khi không cần phải đáp ứng các vấn đề tương tranh. –
Ngoài ra, hãy nhớ rằng mô hình diễn viên cũng có thể được áp dụng trong một mạng, để phát triển một mô hình xử lý yêu cầu không đồng bộ. Trong thực tế, cho rằng đa lõi là có được các quy tắc, trừu tượng này thậm chí có thể thú vị trong một cấp api os (ít nhất nó là dành cho tôi). – Coyote21