C++ 多线程处理,线程间调用的延迟非常低

C++ 多线程处理,线程间调用的延迟非常低,c++,multithreading,c++11,boost,pthreads,C++,Multithreading,C++11,Boost,Pthreads,我正在为我们的机器人系统开发一个新的机器人控制软件,它必须从多个独立的传感器中读取数值,并相应地控制电机 该软件将在带有PREEMPT_RT Ubuntu的i5电脑上运行。每个传感器设备都有一个SDK,我想在单独的线程中运行它。一旦他们从传感器获得新的值(一个传感器一次最多可以有50个双倍),他们应该在高级控制线程中更新这些值。更新速率取决于传感器,但最快可达1 kHz。一旦“主传感器”获得新值并将其发送到控制线程,主传感器的线程就应该触发控制线程中的控制循环(使用非阻塞调用)。然后,控制线程应

我正在为我们的机器人系统开发一个新的机器人控制软件,它必须从多个独立的传感器中读取数值,并相应地控制电机

该软件将在带有PREEMPT_RT Ubuntu的i5电脑上运行。每个传感器设备都有一个SDK,我想在单独的线程中运行它。一旦他们从传感器获得新的值(一个传感器一次最多可以有50个双倍),他们应该在高级控制线程中更新这些值。更新速率取决于传感器,但最快可达1 kHz。一旦“主传感器”获得新值并将其发送到控制线程,主传感器的线程就应该触发控制线程中的控制循环(使用非阻塞调用)。然后,控制线程应使用当前存储的传感器值计算电机的新值,并将其传输到电机。触发控制回路的主传感器也以1 kHz的速率获取新数据,因此通常必须执行控制线程

我现在不知道该怎么做。你认为C++11中的线程功能已经可以解决这个问题了吗?还是应该使用pthreads或boost之类的工具? 主要要求是从一个线程向另一个线程发送数据(最多50倍)的超低延迟(~10µs),以及在另一个线程中触发功能(非阻塞)的能力


一旦传感器线程将当前数据发送到控制线程,它们就应该继续监视硬件,以检查并检索新的传感器值。一些传感器线程对传感器数据执行额外的计算和过滤,这就是为什么我希望它们在额外的线程中运行,然后利用quadcore处理器。

Ubuntu wrap pthreads上的C++11线程。Ubuntu上的Boost也包装了pthreads。我个人会尝试C++11线程,然后学习如何使用谷歌基准测试来确保一切都很快。CPU时间可能并不重要。缓慢的部分可能是传感器的时间读数。I/O可能会很慢。只需运行一些探查器来消除实际瓶颈。很可能@stark是对的,IO操作很慢。顺便说一句:多线程通常被视为性能问题的金锤,而实际上它会带来额外的惩罚来执行适当的数据同步。“低延迟”有很多意义。电机对变化信号的响应曲线是什么?如果电机需要3 ms(非常接近瞬时)来响应控制输入,那么花费大量时间将延迟降低到10µs将是浪费时间。第二,您的电源要求是什么?你接通电源了吗?你介意安装一个CPU(超线程)内核吗?50倍频的1 kHz为50*8*1000字节/秒,或~400k。历史数据重要吗,还是只有最近的数据(即,假设一个滞后峰值:你只关心最新的信息吗?)来介绍一下实时编程。如果没有整个系统内的实际实时支持,您永远无法可靠地实现10µs延迟。然而,你可以得到相当好的结果。上述教程的目的是让您了解平均值和保证值之间的差异,并让您更好地了解如何利用这些差异。在那之前,建立一个原型并量化它的性能,这样你就有办法跟踪自己的进度。