潮声隔雨深 · 2020年04月21日

为什么同样的程序在thread 中特别慢?

我写了一个UDP 发送程序,在main 中可以达到30Mbps,但是如果在thread 中只有7Mbps ,是否RTOS开销特别大?

1 个回答 得票排序 · 时间排序
一知半解 · 2020年04月21日

你好,需要收集更多的信息帮助进一步的判断。比如

操作系统类型和版本
main 父进程的子线程数量、优先级
UDP 所在的 thread 线程的共享地址空间的设定、优先级等
一般而言,进程(process) 和 线程(thread) 的 performance 会有一些区别,这由他们不同的本质导致的。受影响的因素较多,很难用一句话简单回答根本原因是什么。

在不同的 操作系统 (Linux/ Windows/RTOS),或者同一类操作系统 ,但是不同的发布版本上 ( Linux 2.4 vs 2.6 or Redhat vs Ubuntu ) 因为不同的代码实现也有不同的差异。

进程的和OS的通信相对比较简洁和直接,性能会好一些;而线程因为需要考虑到并发 ( concurrent programming ), 需要很多锁(lock)的实现来对共享的地址空间进行保护。 如果某个父进程包含有多个线程,单个线程没有进行优化将会对其他的线程造成很大的性能开销影响。

在你的例子中,可能需要考虑一下其他的非 UDP 线程是否有一些锁占用了较多的CPU时间。比如可以做一下 performance profiling看下测试结果。

你的回答