我有更多的概念问题。 假设一个程序运行两个线程。 两个线程始终都在运行循环。 一个线程负责stream式传输数据,另一个线程负责接收第一个线程必须传输的文件。 所以文件传输线程是循环接收它写入文件的数据,并且stream式处理线程根据需要从该文件中读取数据并对其进行stream式处理。
我在这里看到的问题是如何避免当文件传输占用太多的CPU周期为自己的饥饿,从而使stream线程滞后?
我将如何能够在这两个线程之间有效地共享CPU,因为知道stream传输器比传输文件传输速度慢得多。
我感谢你的build议。
通常使用某种流量控制可以解决这类问题:
接收器忙时阻止发送者。
这个原因也有问题:如果你的程序必须能够快进(向前查找),那么这不是个好主意。
在你的情况下,当文件中的数据超过2MB时,你可以阻塞文件传输线程。 当数据少于1MB时恢复。
看看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周期
如果你阅读这个帖子 ,似乎表明改变线程优先级可能没有帮助。 因为文件传输线程消耗更多CPU周期的原因是它需要它 。 但是在你的情况下,如果文件传输速度减慢,那么你就可以了,因为流式线程无法与之竞争! 因此,我建议你改变优先级, 即使需要,也可以取消一些周期的文件传输线程