gpt4 book ai didi

swift - Serial OperationQueue 与 Operations 同步计时器和 sleep

转载 作者:行者123 更新时间:2023-11-28 13:28:10 25 4
gpt4 key购买 nike

我有一个串行 OperationQueue,其操作调用 usleep。我这样做是因为操作执行 block 与需要重复直到指定时间的计时器同步。

例如,将 3 个操作添加到 maxconcurrent 设置为 1 的队列中。每个操作都有一个计时器,该计时器会重复直到 future 10 秒。在触发第一个操作的计时器后,下一行代码是 usleep(10seconds)。 10 秒后,计时器完成,线程被唤醒。下一个操作开始。这是通过设计和工作完成的,但是,我担心 sleep 线程的影响。有没有可能线程正在处理一些其他代码,上下文切换来处理操作,然后长时间休眠,暂停其他执行。 swift 是否知道让线程在操作休眠时执行其他 block ?

最佳答案

Does swift know to let the thread execute other blocks while the operation sleeps?

也许这只是一个措辞问题,但是线程阻塞直到 sleep (和后续任务)完成,所以它不会被用来做任何其他事情。但是,当线程处于休眠状态时,核心可以切换上下文以让其他线程运行,即使运行该操作的线程已被绑定(bind)。

所以使用usleep(或者我可能使用Thread.sleep(forTimeInterval: 10))避免了阻塞核心的问题,但它仍然阻塞了线程。并且线程相当有限(例如此时为 64 个)。因此,特别是如果您可能在任何给定时间都在进行大量此类操作,从而冒着耗尽有限线程的风险,我可能建议您也避免阻塞线程。 (话又说回来,如果您使用的 maxConcurrentOperationCount 为 1,只要您不做其他可能占用线程的事情,问题可能就不会太严重。)

例如,我可能会定义一个异步 Operation 子类,而不是休眠,我可能只是 asyncAfter(或使用计时器)完成操作到 10 future 几秒钟。这样也没有线程被阻塞。或者我可能会考虑其他模式来解决更广泛的问题。在不知道您要解决的更广泛问题的情况下很难说。

关于swift - Serial OperationQueue 与 Operations 同步计时器和 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57966876/

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