2012-09-19 22 views
5

Với hai nút Erlang, "foo @ host" và "thanh @ host", sau đây tạo ra một bản in-out trên "foo":nút từ xa, các nhà lãnh đạo nhóm và bản in

([email protected]) rpc:call('[email protected]', io, format, ["~p", [test]]). 

Trong khi các bản in sau trên "thanh":

([email protected]) rpc:call('[email protected]', erlang, display, [test]). 

Thậm chí nếu erlang:display/1 là nghĩa vụ phải được sử dụng cho debug chỉ, cả hai chức năng có nghĩa vụ phải gửi công cụ để đầu ra tiêu chuẩn. Mỗi quá trình nên kế thừa nhóm trưởng từ cha mẹ của nó, vì vậy tôi hy vọng rằng hai hàm sẽ hoạt động theo một cách nhất quán.

Có bất kỳ lý do nào cho hành vi trên không?

Trả lời

12

Lý do cho sự khác biệt này trong hành vi là nơibởi ai đầu ra được thực hiện:

  • erlang:display/1 là một BIF và được xử lý trực tiếp bởi BEAM mà viết nó thẳng ra để sản lượng tiêu chuẩn của nó mà không đi bất cứ nơi nào gần hệ thống io của Erlang. Vì vậy, làm điều này trên bar kết quả trong nó in để sản lượng tiêu chuẩn của bar.

  • io:format/1/2 được xử lý bởi hệ thống io Erlang. Vì không có IoDevice đã được gửi, nó sẽ gửi yêu cầu io tới nhà lãnh đạo nhóm của mình. Các rpc:call/4 được thực hiện trong đó đi mà quá trình sinh ra từ xa thừa hưởng các nhà lãnh đạo nhóm của quá trình thực hiện cuộc gọi RPC. Vì vậy, đầu ra đi đến đầu ra tiêu chuẩn của quá trình gọi. Vì vậy, thực hiện cuộc gọi RPC trên foo đến nút bar kết quả ở đầu ra sẽ xuất ra tiêu chuẩn của foo.

Do đó sự khác biệt. Thật thú vị khi lưu ý rằng không cần xử lý đặc biệt điều này trong hệ thống i-ốt Erlang, khi lãnh đạo nhóm đã được thiết lập tất cả hoạt động một cách minh bạch.

+0

Giải thích rõ ràng. Cảm ơn bạn. –

+0

Vâng, đây cũng là lý do tại sao erlang: display/1 là rất tốt để chứng minh làm thế nào Erlang I/O hoạt động. Ví dụ chính xác của bạn bằng cách sử dụng rpc trên một nút từ xa với hiển thị hoặc định dạng là cái gì tôi đã sử dụng trong các buổi đào tạo. :-) – RichardC

+0

@RichardC Bạn có nghĩa là sự khác biệt giữa viết thẳng ra để stdout và sử dụng Erlang io? – rvirding

Các vấn đề liên quan