Я собираюсь сделать некоторые высокоточные показания движения ядра (> = 100 Гц, если это возможно) и анализ движения на iPhone 4+, которые будут работать непрерывно в течение всей основной части приложения. Крайне важно, чтобы реакция на движение и сигналы, которые посылает код анализа, были максимально свободными от задержек.
Мой первоначальный план состоял в том, чтобы запустить выделенный NSThread на основе кода в проекте метронома, на который есть ссылка: Точная синхронизация в iOS вместе с протоколом для анализаторов движения для соединения и использования потока. Мне интересно, могут ли быть лучше очереди GCD или NSOperation?
У меня сложилось впечатление, что после обильного чтения они предназначены для обработки определенного количества разовых одноразовых операций, а не небольшого числа операций, выполняемых снова и снова с регулярным интервалом, и что их использование каждую миллисекунду или около того может непреднамеренно создайте много потоков создания / уничтожения накладных расходов. У кого-нибудь есть опыт здесь?
Мне также интересно узнать о влиянии на производительность бесконечного цикла while в потоке (например, в коде по ссылке выше). Кто-нибудь знает больше о том, как все работает под капотом с нитками? Я знаю, что iPhone4 (и ниже) являются одноядерными процессорами и используют своего рода интеллектуальную многозадачность (упреждающую?), Которая переключает потоки на основе различных временных требований и требований ввода / вывода для создания эффекта параллелизма ...
Если у вас есть поток, у которого простой цикл while работает бесконечно, но выполняет какую-либо дополнительную работу каждую миллисекунду или около того, считает ли алгоритм переключения процессора бесконечный цикл «высоким требованием» к ресурсам, перехватывая их от других потоки или это будет достаточно разумно, чтобы распределять ресурсы более интенсивно по отношению к другим потокам в «простое» между выполнением дополнительного кода?
Заранее благодарим за помощь и опыт ...