Bir denetleyici var. Bir gen_server olan çocuktan child_specs alıyorum. Bunu ilk olarak tek bir yönetici - çocuk ilişkisi için yazdım. Daha sonra bu denetçinin birçok çocuk kurmasını istedim. Ama ben gen_server çocukta devlet olarak bazı ets tabloları var.sorunu
exception exit: {shutdown,
{failed_to_start_child,bench_client2,
{badarg,
[{ets,new,[config,[set,named_table]],[]},
{bench_client,init,1,
[{file,"bench_client.erl"},{line,59}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,306}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,237}]}]}}}
ben ets paylaşıldığı için gözetmen ikinci çocuk init fonksiyonu gittiğinde, zaten bir gördüğünü tahmin ediyorum: gözetmen neye istisna atıyor ikinci çocuğu yaratmaya çalışıyor ne zaman ets tablosu ve böylece istisna ama nasıl olsun emin değilim. Yine de sadece bir tahmin. Ben çocuktan çocuk spesifikasyonları alıyorum nasıl
Bu
olduğunu gen_serverchild_specs() ->
[begin
Name = list_to_atom(?MODULE_STRING ++ integer_to_list(Index)),
{Name, {?MODULE, start_link, [Name]},
transient, 2000, worker, [bench_client]}
end || Index <- lists:seq(1, 20)].
gen_server ait
init() işlevi
init([]) ->
Config = ets:new(config, [set, named_table]),
Destinations = ets:new(destinations, [set, named_table]),
Ben erlang tam bir acemi değilim ve böylece sahip olduğu zor zaman.
Teşekkür ederiz!
ve çalıştı. :) teşekkürler @Steve Vinoski. – root
ets tablosu paylaşılır ve erlang vm'de yaşıyorsa, ilk çocuk ets tablosunu oluşturduğunda ve ikinci çocuk yeni bir tane oluşturmaya çalışırken, neden bir istisna atar? Teşekkür ederim! @Steve – root
Cevabım uyarınca 'named_table' seçeneğini kullanmıyorsanız, iki çocuk işlemi iki farklı et tablosu oluşturuyor. Örneğin, 'erl' komutunu çalıştırırsanız ve 'et'leri çalıştırırsanız: new (config, [set]). İki çağrıdan dönen tablo kimlikleri farklı olacak. –