2

我有更多的概念问题。假设一个程序运行两个线程。两个线程一直在运行循环。一个线程负责流式传输数据,另一个线程负责接收第一个线程必须流式传输的文件。因此,文件传输线程循环接收它写入文件的数据,流线程在需要时从该文件中读取该数据并将其流式传输。

我在这里看到的问题是,当文件传输占用过多的 CPU 周期并因此导致流线程滞后时,如何避免饥饿?

我如何能够在这两个线程之间有效地共享 CPU 知道流传输数据远慢于文件传输接收它。

我感谢你的建议。

4

2 回答 2

2

很多时候这类问题是通过使用某种流控制来解决的:

当接收者忙时阻止发送者。

这也会导致问题:如果你的程序必须能够快进(seek forward),那么这不是一个好主意。

在您的情况下,当文件中有超过 2MB 的非流式数据时,您可以阻止文件传输线程。并在未流式传输数据少于 1MB 时恢复它。

于 2012-04-18T14:15:48.173 回答
0

看看是否pthread_setschedparam()有助于平衡线程对 CPU 的使用

手册页pthread_setschedparam,您可以更改线程优先级。

   pthread_setschedparam(pthread_t thread, int policy,
                         const struct sched_param *param);

       struct sched_param {
           int sched_priority;     /* Scheduling priority */
       };

   As can be seen, only one scheduling parameter is supported.  For details of
   the permitted ranges for scheduling priorities in each scheduling policy, see
   sched_setscheduler(2).

还,

文件传输占用了太多的 CPU 周期

如果您阅读此SO 帖子,似乎表明更改线程优先级可能无济于事。因为文件传输线程消耗更多 CPU 周期的原因是它需要它。但是在您的情况下,如果文件传输速度变慢,因为流媒体线程无论如何都无法竞争,您就可以了!因此,我建议您更改优先级并剥夺文件传输线程的一些周期,即使需要它

于 2012-04-18T13:35:05.907 回答