2

我有一个接收 UDP 消息的低延迟系统。根据消息,系统通过发送 0 到 5 条消息进行响应。找出每个可能的响应需要 50 us(微秒),所以如果我们必须发送 5 个响应,则需要 250 us。

我正在考虑将系统拆分,以便每个可能的响应都由不同的线程计算,但我很好奇为使其更好所需的最短“工作时间”。虽然我知道我需要对此进行基准测试,但我对应该在单独的线程上完成的最少工作的意见感兴趣。

如果我有 5 个线程在等待一个信号来完成 50 us 的工作,并且它们竞争不多,那么在所有 5 个线程完成之前的总时间会多于还是少于 250 us?

4

3 回答 3

1

那是 50us 计算限制还是 IO 限制?如果受计算限制,您是否有多个内核可用于并行运行这些内核?

抱歉 - 有很多问题,但您的特定环境会影响答案。您需要分析并确定在您的特定场景中有何不同(也许使用不同大小的线程池运行测试)。

不要忘记(也)线程默认为其堆栈占用大量内存(默认情况下,512k,IIRC),这也可能影响性能(通过分页请求等)

于 2010-10-13T17:07:49.793 回答
1

如果线程已经在内核上运行,则将数据从一个线程传递到另一个线程非常快 1-4 us。(而不是睡眠/等待/屈服)如果您的线程必须唤醒它可能需要 15 我们,但该任务也将需要更长的时间,因为缓存可能有大量的未命中。这意味着该任务可能需要 2-3 倍的时间。

于 2010-10-13T19:49:51.430 回答
0

If you have more cores than threads, and if the threads are truly independent, then I would not be surprised if the multi-threaded approach took less than 250 us. Whether it does or not will depend on the overhead of creating and destroying threads. Your situation seems ideal, however.

于 2010-10-13T19:23:44.337 回答