LaunchDaemons 的线程睡眠问题

问题描述

我在无限循环中使用了 NSThread sleepForTimeInterval api; 当我以两种不同的方式运行时,睡眠,唤醒间隔存在差异

1) 从终端运行 (sudo /Library/Application Support/Application_Path)

2) 通过 launchdaemons 运行它;(sudo launchctl load /Library/launchdaemons/)

Nsstring *writeString = @"";
while(1){
    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy/MM/dd hh:mm:ss:SSS"];
                    
    writeString = [writeString stringByAppendingString:[Nsstring stringWithFormat:@"Thread Sleeping at Time %@ ",[dateFormatter stringFromDate:[NSDate date]]]];
                    
    [NSThread sleepForTimeInterval:0.03];

    writeString = [writeString stringByAppendingString:[Nsstring stringWithFormat:@"Wake up Time:%@\n",[dateFormatter stringFromDate:[NSDate date]]]];
    [writeString writetoFile:@"/SomePath/SomeFile.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
                    
    }
Output when run it from terminal:

Thread Sleeping at Time 2021/03/17 05:48:20:638 Wake up Time:2021/03/17 05:48:20:670
Thread Sleeping at Time 2021/03/17 05:48:20:672 Wake up Time:2021/03/17 05:48:20:708
Thread Sleeping at Time 2021/03/17 05:48:20:710 Wake up Time:2021/03/17 05:48:20:741
Thread Sleeping at Time 2021/03/17 05:48:20:742 Wake up Time:2021/03/17 05:48:20:774
Output When we run from launch daemon plist:

Thread Sleeping at Time 2021/03/17 05:48:48:579 Wake up Time:2021/03/17 05:48:48:723
Thread Sleeping at Time 2021/03/17 05:48:48:724 Wake up Time:2021/03/17 05:48:48:902
Thread Sleeping at Time 2021/03/17 05:48:48:904 Wake up Time:2021/03/17 05:48:49:083
Thread Sleeping at Time 2021/03/17 05:48:49:085 Wake up Time:2021/03/17 05:48:49:223

第一种方法中的线程睡眠/唤醒间隔间隔大约为 33-35 毫秒 在作为守护程序运行时,它大约需要 144-180 毫秒。

请告知为什么当我们通过 launchdaemon 运行线程唤醒时会花费更多时间

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)