gpt4 book ai didi

iphone - iOS 线程等待操作

转载 作者:可可西里 更新时间:2023-11-01 05:07:05 36 4
gpt4 key购买 nike

我有一个用于填充数据缓冲区的处理线程。在其他地方,一个硬件触发了一个回调,该回调从该数据缓冲区中读取。然后处理线程启动并重新填充缓冲区。

当缓冲区填满时,我正在告诉线程等待:

while( [self FreeWriteSpace] < mProcessBufferSize && InActive) {
[NSThread sleepForTimeInterval:.0001];
}

但是,当我分析时,我发现大量 CPU 时间花在了 sleep 上。有没有更好的等待方式?我什至关心配置文件是否说时间是在 sleep 中度过的?

最佳答案

sleep 时间实际上是免费的。在 Instruments 中,查看“运行样本”而不是“所有样本”。但这仍然不是理想的解决方案。

首先,您的 sleep 间隔太长了。你真的需要 0.1µs 的粒度吗?系统几乎肯定不会给你,因为处理器不是那么快。我必须相信您可以将其提高到 .1 或 .01。但这仍然是忙等待,如果你能帮助的话,这并不理想。

更好的解决方案是使用 NSCondition。在此线程中,等待条件,并在您的处理线程中,在有空间写入时触发条件。

请注意您的命名。不要用前导大写命名方法(这表明它是一个类名)。并避免像这样直接访问 ivars (InActive)。 “InActive”也是一个很容易混淆的名字。是表示系统处于事件状态(In Active)还是非事件状态(inactive)。在 Objective-C 中命名非常重要。编译器不会像在 C# 和 C++ 中那样保护您。好的命名是让程序正常运行的方式,ObjC 的许多部分都依赖于它。

您可能还想研究专为此类问题设计的 Grand Central Dispatch。查看 dispatch_async() 在新数据进来时运行。

关于iphone - iOS 线程等待操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981969/

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