Why do we need simple_one_for_one?

巧了我就是萌 提交于 2019-12-11 10:04:18

问题


Somebody told me that simple_one_for_one is very useful for chat applications, because each chat client is a server process (gen_server). Is this right?

And I wonder why do we need it? Why not create only one center server (gen_server) to handle all chat client communication? Because maybe the number of chat clients is very large so only one server couldn't handle fast, make the system slow down?

I think maybe creating too many servers like simple_one_for_one may take too much system resource. I'm a new OTP guy, so I really need explanation about this point.


回答1:


Yes, the idea is that you would have a process (gen_server) per client.

This lets you isolate failure of one client from another.

If you had everyone in a single process, you have to be very careful to handle all the things that might go wrong and crash you process (thus, disconnecting all your clients).

With one process per client, you can code for the happy path and just let it crash when things go wrong. Worst case is you drop a single client.

Processes are fairly cheap (nothing like creating threads). On a modern machine you can have millions.

If your user base is in the many millions, I'm sure you'd end up with more than one server anyway. So something that can easily scale to the hundreds of thousands to low millions on a box is plenty.



来源:https://stackoverflow.com/questions/23412792/why-do-we-need-simple-one-for-one

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!