2012-10-05 22 views
5

Trong các ví dụ được cung cấp trên github Cowboy, và trong một số ví dụ khác tôi đã tìm thấy trên mạng, có một - một giám sát viên dường như không làm gì cả. Tôi thậm chí còn tin rằng tôi đã thấy một ví dụ có nhận xét sau, "giống như một người giám sát thực sự không làm bất cứ điều gì".Mục đích của người giám sát một đối một trong nhiều ví dụ cao bồi

Mục đích của mô-đun giám sát có vẻ như là một phần của rất nhiều ví dụ cao bồi?

Từ ví dụ echo_get:

%% Feel free to use, reuse and abuse the code in this file. 

%% @private-module(echo_get_sup). 
-behaviour(supervisor). 

%% API. 
-export([start_link/0]). 

%% supervisor. 
-export([init/1]). 

%% API. 
-spec start_link() -> {ok, pid()}. 
start_link() ->  
    supervisor:start_link({local, ?MODULE}, ?MODULE, []). 

%% supervisor. 
init([]) -> 
    Procs = [], 
    {ok, {{one_for_one, 10, 10}, Procs}}. 

Trả lời

6

Từ erlang application behavior documentation:

start được gọi là khi khởi động ứng dụng và nên tạo cây giám sát bằng cách bắt đầu giám sát hàng đầu. Nó dự kiến ​​sẽ trả lại pid của người giám sát hàng đầu và cụm từ tùy chọn State, mặc định là []. Thuật ngữ này được thông qua như là để dừng lại.

Anh ấy có người giám sát giả này, vì vậy anh ấy có thể gọi nó ở cuối chức năng bắt đầu here. Tôi nghĩ rằng nó không có mục đích thực tế ngoại trừ để đáp ứng điều kiện này.

1

Bạn không cần phải chỉ định tất cả trẻ em mà người giám sát quản lý khi bắt đầu. Bạn có thể thêm/bắt đầu chúng động bằng cách sử dụng supervisor:start_child/2 và quản lý chúng bằng cách sử dụng supevisor:restart_child/2, supervisor:terminate_child/2supervisor:delete_child/2. Điều này có nghĩa là ngay cả khi người giám sát không có con ngay từ đầu nó không có nghĩa nó chỉ là giả.

Nhận xét rằng người giám sát thực sự "không làm bất cứ điều gì" có nhiều khả năng liên quan đến thực tế là người giám sát chỉ có thể giám sát quy trình và không thực hiện bất kỳ công việc nào như quy trình công nhân. Hoặc ít nhất đó là nó nên có nghĩa là!

+0

Tôi không thấy bằng chứng cho thấy bất kỳ hàm start_child/2, v.v. đang được gọi. Tôi nghi ngờ câu trả lời mà cashmere @cashmere đưa ra có nhiều khả năng là trường hợp. Tất nhiên, tôi chắc chắn có thể thiếu một cái gì đó ... – Jr0

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