Điều ác thực sự là trạng thái có thể chia sẻ được chia sẻ. Trong trường hợp một luồng, trạng thái có thể thay đổi được chia sẻ có nghĩa là các hàm không thể được soạn thảo một cách an toàn - bởi vì một cuộc gọi có thể sửa đổi một số trạng thái mà sau đó được đọc bởi cuộc gọi thứ hai và bạn sẽ nhận được kết quả không mong muốn. Trong trường hợp nhiều luồng, trạng thái có thể thay đổi được chia sẻ có nghĩa là bạn có tiềm năng cho điều kiện chủng tộc.
Lập trình chức năng thường tránh đột biến. Các hàm vẫn có thể chia sẻ một số trạng thái (ví dụ như đóng cửa có thể nắm bắt trạng thái), nhưng nó không thể bị biến đổi. Trong trường hợp đơn luồng, cũng không có sự không xác định. Trong trường hợp đa luồng, khá nhiều thứ duy nhất mà bạn có thể làm trong phong cách chức năng thuần túy là thực hiện song song nối (và dữ liệu song song) mà không cần trạng thái có thể thay đổi và hoàn toàn xác định được.
Lập trình dựa trên đại lý cũng tránh trạng thái có thể chia sẻ được chia sẻ nhưng theo cách khác. Bạn có các đại lý bị cô lập chỉ có thể chia sẻ bất biến thư. Vì vậy, có một số không xác định (vì chúng giao tiếp bằng cách gửi tin nhắn), nhưng chúng chỉ trao đổi các giá trị bất biến. Trong thực tế, bạn thậm chí có thể sử dụng trạng thái có thể thay đổi bên trong một tác nhân - miễn là nó không được chia sẻ, bạn vẫn tránh trạng thái có thể thay đổi được chia sẻ.
Nguồn
2014-04-09 13:34:55
nhiều hơn về trạng thái diễn viên và không xác định [ở đây] (http://james-iry.blogspot.com/2009/04/erlang-style-actors-are-all-about.html) và [tại đây] (http://pchiusano.blogspot.com/2013/09/actors-are-overly-nondeterminstic.html) – eulerfx