На устройстве iOS я недавно обнаружил, что странное поведение.
Code1:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"1111");
});
while (1) {
sleep(1);
}
});
Кодекса2:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"1111");
});
while (1) {
sleep(0.5);
}
});
Код1 и Код2 отличаются только тем, что Код1 спит 1 секунду каждый цикл, а Код2 спит 0,5.
Если вы запустите эти два кода на устройстве iOS с одним ядром, Code1 напечатает @ 1111, а Code2 - нет.
Не знаю, почему глобальная очередь считается параллельной. Она всегда должна выводить число независимо от того, что делают другие блоки. И если это что-то из-за ограничения этого одноядерного устройства, почему sleep (0.5) и sleep (1) будут иметь значение?
Я действительно хочу знать причину этого.
EDIT
Я обнаружил, что использование сна (0.5) - моя глупая ошибка. Функция sleep()
принимает параметр типа unsigned int. Таким образом, sleep (0.5) равно sleep (0). Но блокирует ли сон (0) всю параллельную очередь?