gpt4 book ai didi

objective-c - 测量线程等待锁所花费的时间(由 coredata 锁定)

转载 作者:行者123 更新时间:2023-12-04 02:59:30 24 4
gpt4 key购买 nike

我们在某些线程中使用 coredata...(太多并发上下文不好 - 我知道,我经历过)

现在每个获取/保存 coredata 都会包裹一个锁。

我现在想测量一个线程被阻塞等待获取该锁所花费的时间。


我想我可以只使用时间分析器甚至线程状态仪器或采样器。但:- 时间分析器只是忽略等待(可能是因为它不是 CPU 调用)- 采样器(即使他不是 cpu 模式)- 线程状态仪器也没有显示正确的调用堆栈:([但也许(而且总是有可能)我确实忽略了一个简单的解决方案]


这里我有一个非常简单的应用程序,它也有一个锁,但我也无法获得等待时间......也许你可以帮助我在这个例子中获得主线程等待的时间——使用一些分析然后我可以将技术转移到 coredata 案例:

@implementation DDAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLock *l = [[NSLock alloc] init];
NSLog(@"made");
[NSThread detachNewThreadSelector:@selector(hogTheLog:) toTarget:self withObject:l];
NSLog(@"wait");
[l lock];
NSLog(@"got");
[l unlock];
NSLog(@"terminate");
[NSApp terminate:nil];
}

- (void)hogTheLog:(NSLock*)l {
[l lock];
sleep(3);
[l unlock];
}
@end

最佳答案

我不确定 Xcode 有这个功能多久,我只在 5.1 中注意到它。在“时间分析器”仪器配置中,现在有一个复选框“记录等待线程”。在这种模式下,它会准确记录应用程序在每个方法/函数等上花费了多少时间(而不是仅仅测量 CPU 时间)。

enter image description here

我将采样间隔设置为 20 毫秒,否则整体会太慢。

UPD:另外,将“Sample Perspective”(在屏幕截图的左下角)设置为“Running Sample Times”以在线程刚刚从图片中空闲时丢弃样本。

关于objective-c - 测量线程等待锁所花费的时间(由 coredata 锁定),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314024/

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