定时群发报文时,怎么做多线程比较优雅?
資深大佬 : auto8888 6
应用场景是 socket 通信,主线程组包,每秒定时群发多个 tcp 报文,如果发送都放在一个线程里,怕中间有 TCP 堵塞,影响其他的发送。
这个需求是不是叫发令枪?什么 wait()、notify()啥的,但每秒都要发令一次,感觉好像不太像
环境是 Linux,c++11,线程用的 std::thread
大佬有話說 (3)
应用场景是 socket 通信,主线程组包,每秒定时群发多个 tcp 报文,如果发送都放在一个线程里,怕中间有 TCP 堵塞,影响其他的发送。
这个需求是不是叫发令枪?什么 wait()、notify()啥的,但每秒都要发令一次,感觉好像不太像
环境是 Linux,c++11,线程用的 std::thread
每一个 worker 都具有一个信号量 S,这个 S 的意义是“发报文指令”
主线程每秒对每一个 worker 的 S 进行 down,意思是生产一个发报文指令。
同时 worker 的代码是:while true { up(S); send(); }。
如果怕进程重启,异步队列丢数据的话,可以用 redis 来做异步队列
信号量用的 std::mutex 和 std::condition_variable
![image.png]( https://i.loli.net/2020/12/23/XHubcOW7FgtpoCV.png)