cpp-ipc icon indicating copy to clipboard operation
cpp-ipc copied to clipboard

有几个问题想咨询一下

Open liuxw7 opened this issue 2 years ago • 3 comments

1、发送端在发送消息的时候,如何知道有有哪几个客户端,退出了连接,是怎么实现的。 2、对于高频的发送是否支持,比如发送周期是10ms一次的,循环发送。这样会不会导致内存泄露。 3、在高频(20m<)发送的情况下,send出去之后,假如有10个recv,会不会有抢不到资源的recv。 4、在高频情况下,cpu使用率是不是会上升很快,甚至导致其他程序得不到资源。

谢谢mutouyun。

liuxw7 avatar Mar 31 '23 04:03 liuxw7

1、发送端在发送消息的时候,如何知道有有哪几个客户端,退出了连接,是怎么实现的。 》channel会创建一个计数器

2、对于高频的发送是否支持,比如发送周期是10ms一次的,循环发送。这样会不会导致内存泄露。 》10ms频率不是很高。只要你接收端处理足够及时,没问题

3、在高频(20m<)发送的情况下,send出去之后,假如有10个recv,会不会有抢不到资源的recv。 》广播 broadcast 模式下不会有 recv 收不到消息,除非某个 recv 处理不及时,导致发送方等待超时

4、在高频情况下,cpu使用率是不是会上升很快,甚至导致其他程序得不到资源。 》正常情况下不会。但确实之前有解决一些意外的导致 cpu 升高的 bug。 》目前的版本对程序退出不友好(因为我之前写这个库的时候,使用场景是嵌入式环境,进程不会重启,coredump只会重启系统),所以要注意你是不是有需要正常退出后再启动的情况。

mutouyun avatar Apr 02 '23 13:04 mutouyun

是不是说,对于异常退出的进程,计数器无法改变其计数,这样就会导致内存泄露。

liuxw7 avatar Apr 03 '23 01:04 liuxw7

其实倒不是内存泄漏,计数器无法改变会导致发送端长时间等待接收端。
目前的做法是超时会自动清理一次连接标记。
但由于清理动作本身不是无锁的(其实是没考虑清理的同时出现新的接收端),异常退出再启动很容易出问题。

另外还有一些对异常退出很不友好的 bug,参看:https://github.com/mutouyun/cpp-ipc/issues/79 https://github.com/mutouyun/cpp-ipc/issues/88

mutouyun avatar Apr 05 '23 11:04 mutouyun