sogou / workflow

C++ Parallel Computing and Asynchronous Networking Framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

WebSocket分支使用问题求助

Detxie opened this issue · comments

1、问题描述:
使用websocket-client分支建立22路连接,随着路数越多处理速度越来越慢。workflow的网络响应也越来越慢
2、一些硬件信息:
centos7
16核
3、问题发现:
(1)我的日志在打印时会打印线程号。
(2)在worfklow程序运行时我设置了两个参数 settings.poller_threads = 24,settings.handle_threads =24
(3)通过日志我发现websocket-client建立连接时(需要给server发送一个ping命令)22路连接全部建立一共出现15个线程号。
(4)在websocket的callback函数中处理ws-server发过来的数据。通过日志发现一直只有4个线程在打印。

4.疑问:
(1)我感觉处理慢是因为ws-callback的处理线程太少(我通过setting不是设置了24?)
(2)接下来我该如何继续排查一下慢的问题呢?或者说callback这个处理线程是4正确吗?

  1. 理论上可以处理callback的线程应该会等于settings.poller_threads = 24,4个是默认的poller_threads的个数,确实可以检查一下是否正确设置了参数。
  2. ping这个任务会在建立完connect之后再进行发送。
  3. perf是否可以看出是哪个函数占用时间比较多呢?或者这个场景是否可以进一步简化,比如单独只跑某个请求、跑多久会触发之类的,我也尝试复现一下?
  1. 理论上可以处理callback的线程应该会等于settings.poller_threads = 24,4个是默认的poller_threads的个数,确实可以检查一下是否正确设置了参数。
  2. ping这个任务会在建立完connect之后再进行发送。
  3. perf是否可以看出是哪个函数占用时间比较多呢?或者这个场景是否可以进一步简化,比如单独只跑某个请求、跑多久会触发之类的,我也尝试复现一下?

已解决,设置poller时要在程序的最开始。之前在设置前可能workflow框架已经初始化了线程池大小。