gpt4 book ai didi

多线程,何时屈服与 sleep

转载 作者:行者123 更新时间:2023-12-04 00:40:38 27 4
gpt4 key购买 nike

为了澄清术语,yield 是线程放弃其时间片的时间。
我感兴趣的平台是 POSIX 线程,但我认为这个问题很普遍。

假设我有消费者/生产者模式。如果我想限制消费者或生产者,使用、 sleep 或产量哪个更好?我最感兴趣的是使用任一功能的效率。

最佳答案

对生产者/消费者进行编码的“正确”方式是让消费者等待生产者的数据。您可以通过使用诸如互斥体之类的同步对象来实现这一点。消费者会Wait在互斥锁上,阻止它执行直到数据可用。反过来,当数据可用时,生产者将向互斥锁发送信号,这将唤醒消费者线程,以便它可以开始处理。这比 sleep 更有效在两者方面:

  • CPU 利用率(不浪费任何周期),以及
  • 运行时间(在数据可用时立即开始执行,而不是在调度线程唤醒时开始执行)。

  • 也就是说,这是您要求的产量与 sleep 的分析。如果由于某种原因等待输出不可行,您可能需要使用这样的方案:

    这取决于您收到多少流量 - 如果数据不断被接收和处理,您可能会考虑进行 yield 。然而,在大多数情况下,这将导致一个“忙”循环,它花费大部分时间不必要地唤醒线程以检查是否有任何准备就绪。

    您可能希望 sleep 一小段时间(可能不到一秒钟,使用 usleep )或者甚至更好地使用同步对象(例如互斥锁)来表示数据可用。

    关于多线程,何时屈服与 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668546/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com