求大佬指导:在管道、共享内存和socket通信的优缺点,在一个多用户的工程项目里使用哪种方式更好?
你提出的多用户跟多进程间通信有什么关系?
为什么要提出多用户!?
只要适合场景都可以。
如果使用socket通信,每个用户开启一个socket并且使用该套接字无限接收和发送消息,如果同一时间有若干个用户登录,是否会达到服务器能开启的最大线程数?另外,使用socket需要绑定端口,如果多用户同事登录会不会出现端口被占用,从而引发用户断线的问题?
如果使用共享内存,因为共享内存没有同步和互斥机制,如果使用信号量来控制线程的同步和互斥,在信号量同步操作时我们往往会设置多个信号量,而信号量又是一种有限的资源,多用户登录的情况下是否会耗光这种资源?
@水云间月掌柜:
如果使用socket通信,每个用户开启一个socket并且使用该套接字无限接收和发送消息,如果同一时间有若干个用户登录,是否会达到服务器能开启的最大线程数?[【计算机都是有限资源,可能会,优劣取决于实现方式】另外,使用socket需要绑定端口,如果多用户同事登录会不会出现端口被占用,从而引发用户断线的问题?【服务器端口跟客户端端口不是一个概念】
如果使用共享内存,因为共享内存没有同步和互斥机制,如果使用信号量来控制线程的同步和互斥,在信号量同步操作时我们往往会设置多个信号量,而信号量又是一种有限的资源,多用户登录的情况下是否会耗光这种资源?【计算机都是有限资源】
概念太多混杂是不好的。关于socket理解有误,第二段理解也有误,除了api提供的方式,自己也是可以实现信号量的,耗不耗完都只取决你的实现方式和策略。
比如为了连接更快,使用异步连接方式,在很多情况下我们还会设定work池来进行工作解决进程内线程数量问题,每个用户存在一个存量问题,但用户又是不可控的,我们可以用动态集合中标识每个用户...用户不再了,那么该用户数据生命周期就结束...实践是为了更好的理解。