在开发基于VoIP的应用程序时,我们有一个通用的多线程C++11模块.它在iOS、MacOS中运行良好,但在Android中发现线程调度困难。
可选的设计描述(仅在感兴趣的情况下)
我有几个线程在运行消息队列。
1-2是相关的,3-4是相关的。
我观察到,在许多调用过程中,只有两个线程在积极运行,而其他两个线程没有运行时间。由于该单向语音路径被观察到。
问题
我怀疑这是Android Linux的问题,为此,我已经有了一个未回答的帖子:
c++11 multithreading issues with Android where some threads are not scheduled properly。
目标是给所有线程类似的时间切片。尝试了以下选项:
std::thread::yield();例如,来自一个线程的10条消息。我尝试了yield() 1次和100次循环,但没有优势。同一线程继续运行。sleep_for()选项也是一样的。同一线程继续运行。nice()值更改为-10、-20,但没有结果。如何在不消耗太多CPU周期的情况下有效地使用std::this_thread::yield()?
发布于 2014-12-15 09:01:35
std::this_thread::yield()完全不做任何事情是合法的。它为调度程序调度另一个线程提供了一个机会;调度程序不必利用它。
你可以试一试:
https://stackoverflow.com/questions/27479842
复制相似问题