我有一个 gen_server 模块,它在客户端进程发送数据时将数据记录到文件中。当两个客户端进程同时向该模块发送数据时会发生什么?文件操作会不会相互冲突? erlang documentation这里令人沮丧地不清楚。

请您参考如下方法:

每个 Erlang 进程都维护一个消息队列。该过程将获取一条消息并一一处理这些消息。

在您的示例中,如果两个客户端调用 gen_server同时,这些调用会变成gen_server的队列中的一条消息过程,以及 gen_server将一一处理这些消息。所以不必担心冲突。

但是如果一个进程必须处理来自其他进程的太多消息,则需要考虑进程的容量并优化设计,否则它将成为瓶颈。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!