我对辅助线程进行了dispatch_async调用,仅出于测试目的,我想让辅助线程休眠5秒钟。 这是代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(5);
});
当我在Mac OSX Lion 10.7.2上测试时,sleep()函数不会让线程进入休眠状态。在iPhone模拟器上使用相同的代码。
在mac上,sleep在主线程上工作,而在辅助线程上使用[NSThread sleepUntilTimeInterval:]也可以工作。
为什么sleep()函数在mac上的辅助线程上工作? 谢谢。
答案 0 :(得分:4)
如果可能,全局队列在多个线程上同时运行任务。 Mac通常有4-16个核心,因此队列中有多个工作人员是有意义的。最好将全局队列视为线程池。
如果您希望队列中的任务按特定顺序执行,您可能希望查看串行队列。
答案 1 :(得分:2)
你在使用ipc的任何信号吗?
任何信号都会中断sleep(),但不会中断[NSThread sleepForTimeInterval:]。
答案 2 :(得分:0)
你怎么知道sleep(5)
没有在iOS上执行?我在块中的sleep()之前或之后都没有看到任何内容,表明 a 线程没有阻塞,并且当你对并发队列发出dispatch_async()时,你执行的是哪个线程(包括当前线程)一个)在设计上是不确定的,所以不要对此做出任何假设。