跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 定时群发报文时,怎么做多线程比较优雅?
未分類
31 12 月 2020

定时群发报文时,怎么做多线程比较优雅?

定时群发报文时,怎么做多线程比较优雅?

資深大佬 : auto8888 6

应用场景是 socket 通信,主线程组包,每秒定时群发多个 tcp 报文,如果发送都放在一个线程里,怕中间有 TCP 堵塞,影响其他的发送。

这个需求是不是叫发令枪?什么 wait()、notify()啥的,但每秒都要发令一次,感觉好像不太像

环境是 Linux,c++11,线程用的 std::thread

大佬有話說 (3)

  • 資深大佬 : crclz

    用信号量啊。信号量是关于生产和消费的。
    假设 N 个线程负责定时向 N 个 TCP 连接发送报文。我们称这 N 个线程为 N 个 worker 。
    你这个模型就是生产和消费“发报文指令”的。主线程生产指令,worker 消费指令。

    每一个 worker 都具有一个信号量 S,这个 S 的意义是“发报文指令”
    主线程每秒对每一个 worker 的 S 进行 down,意思是生产一个发报文指令。
    同时 worker 的代码是:while true { up(S); send(); }。

  • 資深大佬 : heyjei

    简单的做法就是,N 个线程从异步队列里竞争取数据,谁先取到数据就由谁取发送这个 TCP 包,主线程只管往异步队列里扔 TCP 包。

    如果怕进程重启,异步队列丢数据的话,可以用 redis 来做异步队列

  • 主 資深大佬 : auto8888

    @crclz 搞定了,很帅

    信号量用的 std::mutex 和 std::condition_variable

    ![image.png]( https://i.loli.net/2020/12/23/XHubcOW7FgtpoCV.png)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具