我有一个延迟敏感的交易应用程序,它必须从UDP套接字接收数据。这些数据频繁(大约每秒100个)但很小(56个字节)。 我目前的设计是使用阻塞UDP套接字,但速度似乎不够快。您是否认为使用自旋循环进行轮询并将UDP设置为非阻塞;会更快吗?对于CPU使用,我的服务器始终为零,因此无需担心CPU使用率。我目前的应用程序设计如下:
数据 - >阻断-UDP->在并发队列中推送数据(阻止)
从并发队列中获取数据(阻止)---->处理--->在TCP套接字中发送订单
我对UDP阻塞读取延迟的测量大约是3us。我认为如果使用自旋循环+非阻塞可能会更小,但我不确定是否有副作用。我想一些专家可能会建议一个更好的模型,我愿意在这里听。
另一个问题是你可能会认为并发队列应该是瓶颈,因为涉及到互斥锁和阻塞事件......我想在那里采用无锁队列但不知道哪种无锁队列应该使用。
我知道有些人可能会说它必须在实际情况下进行测量或分析,但我想在采取任何行动之前寻找一些即时建议;谢谢:)非常感谢有些人可以就CPU亲和力提出一些建议,以尽量减少延迟。
最后,Stackoverflow是最好的;我总是从这里的专家那里学到很多东西:)