I have a gen_server module that logs data to a file when a client process sends it data. What happens when two client processes send data at the same time to this module? Will the file operations conflict with each other? The erlang documentation is frustratingly unclear here.
Share
Every Erlang process maintains a message queue. The process will fetch a message and handle the messages one by one.
In your example, if two clients calls the
gen_serverat the same time, these calls will become a message in the queue ofgen_serverprocess, and thegen_serverwill process these messages one by one. So no need to worry about a conflict.But if one process has to handle too many messages from other processes, you’ll need to think about the capacity of the process and optimize the design, or else it will become a bottleneck.