2014-01-16 21 views

回答

0

不同的gen行爲與進程有不同的關係。 gen_servergen_fsm每個實例有一個進程(可以有多個進程運行相同的gen_server代碼)。而gen_event正在調用進程(gen_event:call)的上下文中同步運行handle_event回調,或者在事件管理器進程(gen_event:notify)的上下文中同步運行。

gen的行爲在那裏抽象出併發和使用過程來實現這一點。他們是如何做到這一點的,如果進程和gen行爲之間存在1:1關係,則取決於實際gen行爲的實現。

+1

事件管理器是一個進程,並且gen_event處理程序在該進程中運行,而不管該事件是由'gen_event:notify'還是'gen_event:call'生成的。它類似於'gen_server:call'和'gen_server:cast'。 – rvirding

0

gen_server是一個'行爲'。這是關於模塊結構的一些協議。模塊中有哪些功能可用,什麼是該功能的簽名,可以返回什麼值等等。

otp體系結構假定某些進程在該模塊上運行。

所以我們可以說 - 某些進程是gen-server,如果它運行在具有gen_server行爲的模塊上,並且是由函數啓動的,旨在啓動gen_server(start()或start_link())。