Multithreading 在音频流应用程序中高效使用fifo
我有一个音频dsp应用程序,它使用线程池以比实时快得多的速度生成输出。这是为了在游戏中使用,音频流必须具有相当低的延迟。每个完成的缓冲区都会在主混合线程中结束,我需要从主混合线程将其交付给应用程序程序员。我想我可能在主类中有一个read_samples方法,它接受一个缓冲区指针和一些要读取的样本,并返回实际读取的样本数 我正在研究一种无锁fifo,即boost.lockfree中的单生产者/单消费者队列。我目前的设计目标如下:Multithreading 在音频流应用程序中高效使用fifo,multithreading,synchronization,signal-processing,fifo,Multithreading,Synchronization,Signal Processing,Fifo,我有一个音频dsp应用程序,它使用线程池以比实时快得多的速度生成输出。这是为了在游戏中使用,音频流必须具有相当低的延迟。每个完成的缓冲区都会在主混合线程中结束,我需要从主混合线程将其交付给应用程序程序员。我想我可能在主类中有一个read_samples方法,它接受一个缓冲区指针和一些要读取的样本,并返回实际读取的样本数 我正在研究一种无锁fifo,即boost.lockfree中的单生产者/单消费者队列。我目前的设计目标如下: 非常重要的是,数据从fifo中输入和输出 很快,所以我们希望尽可能少
他们显然可以在没有满足条件的情况下醒来,这似乎很奇怪。如果您有任何建议,我们将不胜感激。当生产商生产过多材料时,获得阻塞行为的正确方法是使用条件变量。生产者在达到其限制时调用wait,消费者在消耗某些数据后立即调用notify_all。然后,生产者醒来并生成更多数据,等等。FIFO中是否必须有实际数据?在高性能I/O中,更常见的是使指向“空”缓冲区的指针队列可供驱动程序使用。驱动程序用数据填充缓冲区(或部分缓冲区和长度),将缓冲区指针排到更高级别,并立即将另一个缓冲区指针排到下一批数据的队列中。驱动程序每次将缓冲区排队返回时都会发出信号量信号,以便更高级别的线程知道有一个信号量要出列和处理。“数据从fifo中快速推入和传出很重要”-只要只有一个生产者,设计/使用完全不需要硬锁定的队列就很简单,一个消费者,而你只是在排队等待指针。谢谢你的提示,马丁。将指针推到fifo中的缓冲区是一个好主意,我必须对此进行研究。我确实用一个条件变量解决了我原来的问题(我终于找到了正确使用它们的方法)。所以现在生产者耐心地等待消费者,就像我想的那样。