Any*_*orn 12 multithreading sleep yield
为了澄清术语,yield是线程放弃时间片的时间.我感兴趣的平台是POSIX线程,但我认为这个问题很普遍.
假设我有消费者/生产者模式.如果我想扼杀消费者或生产者,哪个更好用,睡觉还是产量?我最感兴趣的是使用这两种功能的效率.
Jus*_*ier 10
对生产者/消费者进行编码的"正确"方法是让消费者等待生产者的数据.您可以使用同步对象(如Mutex)来实现此目的.消费者将Wait使用互斥锁,阻止它执行直到数据可用.反过来,生产者将在数据可用时发出互斥信号,这将唤醒消费者线程,以便开始处理.这比sleep两者都更有效:
也就是说,这是你要求的产量与睡眠的分析.如果由于某种原因等待输出不可行,您可能需要使用这样的方案:
这取决于您接收的流量 - 如果不断收到和处理数据,您可能会考虑收益.然而,在大多数情况下,这将导致"忙"循环,其大部分时间花费在不必要地唤醒线程以检查是否有任何准备好.
您可能希望在短时间内睡眠(可能不到一秒钟,使用usleep)或者甚至更好地使用同步对象(如互斥锁)来表示数据可用.
Ern*_*lli 10
睡眠和产量是不一样的.当调用sleep时,进程/线程在给定的时间内将CPU提供给另一个进程/线程.
yield将CPU释放到另一个线程,但如果没有其他线程等待CPU,则可能会立即返回.
因此,如果您想节流,例如定期流式传输数据,那么睡眠或纳米睡眠就是使用的功能.
如果需要生产者/消费者之间的同步,则应使用互斥/条件等待.
| 归档时间: |
|
| 查看次数: |
21191 次 |
| 最近记录: |