Pid là số nhận dạng quy trình. Bạn có thể nhận được một khi bạn tạo quy trình mới với spawn
hoặc bạn có thể nhận được Pid của chính mình bằng self()
. Nó cho phép bạn tương tác với quá trình đã cho. Đặc biệt gửi tin nhắn cho nó bằng Pid ! Message
. Và một số thứ khác, như giết nó một cách rõ ràng (không nên làm) hoặc thu thập một số thông tin quy trình với erlang:process_info
.
Và bạn có thể tạo mối quan hệ giữa quá trình với erlang:link(Pid)
và erlang:monitor(process, Pid)
(đó là giữa quá trình Pid
và quá trình thực hiện chức năng này). Trong ngắn hạn, nó mang lại cho bạn "thông báo" khi một quá trình khác chết.
Tham khảo chỉ là almost unique giá trị (thuộc loại khác). Người ta có thể nói, rằng nó cung cấp cho bạn một số tham chiếu đến đây và bây giờ, mà bạn có thể nhận ra sau này.Ví dụ, nếu chúng ta gửi một thông điệp đến một tiến trình khác, và chúng ta mong đợi một phản hồi, chúng ta muốn đảm bảo rằng thông điệp chúng ta sẽ nhận được liên quan đến yêu cầu của chúng ta chứ không phải bất kỳ tin nhắn nào từ người khác. Cách dễ nhất để thực hiện việc này là gắn thẻ tin nhắn với một giá trị duy nhất và đợi cho đến khi một phản hồi với chính xác cùng một thẻ.
Tag = make_ref(),
Pid ! {Tag, Message},
receive
{Tag, Response} ->
....
Trong mã này, với việc sử dụng phù hợp với mô hình, chúng tôi đảm bảo rằng (chúng tôi chờ đợi trong nhận cho đến khi) Response
là chính xác cho Message
chúng tôi đã gửi. Không có vấn đề thông điệp khác từ các quá trình khác. Đây là cách sử dụng tài liệu tham khảo phổ biến nhất mà bạn có thể gặp phải.
Và bây giờ, hãy quay lại monitor
. Khi gọi Ref = monitor(process, Pid)
, chúng tôi sẽ thực hiện kết nối đặc biệt này với quy trình Pid
. Ref
được trả lại chỉ là một số tham chiếu duy nhất mà chúng tôi có thể sử dụng để demonitor
quy trình này. Đó là tất cả.
Người ta chỉ có thể hỏi, nếu chúng ta có thể tạo màn hình với Pid
, tại sao chúng ta cần Ref
để tìm kiếm? Chúng ta không thể chỉ sử dụng lại Pid
. Về lý thuyết, chúng tôi có thể, nhưng các màn hình được thực hiện theo cách như vậy, nhiều màn hình có thể được thiết lập giữa hai quy trình tương tự. Vì vậy, khi phản đối, chúng ta phải loại bỏ chỉ một trong những kết nối như vậy. Nó được thực hiện theo cách này để làm cho việc giám sát minh bạch hơn. Nếu bạn có thư viện chức năng tạo và xóa một màn hình, bạn sẽ không muốn can thiệp vào các thư viện và chức năng và màn hình khác mà chúng có thể đang sử dụng.