我有一个gen_server模块,当客户端进程发送数据时,它会将数据记录到文件中.当两个客户端进程同时向此模块发送数据时会发生什么?文件操作是否会相互冲突?这里的erlang文档令人沮丧.
Che*_* Yu 13
每个Erlang进程都维护一个消息队列.该过程将获取消息并逐个处理消息.
在您的示例中,如果两个客户端同时调用gen_server,则这些调用将成为gen_server进程队列中的消息,并将gen_server逐个处理这些消息.所以不必担心冲突.
但是,如果一个进程必须处理来自其他进程的过多消息,则需要考虑进程的容量并优化设计,否则它将成为瓶颈.
gen_server在与客户端进程分开的进程中运行,因此当您对其进行调用/强制转换时,实际上是向服务器进程发送消息.所有消息都放在进程消息队列中,进程逐个处理它们的消息.如果在进程繁忙时消息到达,则将其放入消息队列中.因此,同时到达的日志消息将永远不会相互干扰,因为它们将被顺序处理.
这不是gen_server的属性,而是erlang中所有进程的一般属性,这就是为什么在gen_server文档中没有提到这一点.
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |