NSOperationQueue против NSThread Priority - контролирует, сколько ЦП потребляется в NSOperationQueue - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть некоторые предварительные загрузки текстур и звуковых эффектов, которые мне нужно сделать асинхронно, чтобы создать плавный пользовательский опыт в разрабатываемой мной игре для iOS.

Я пытаюсь выбрать между NSOperationQueue и NSThread, чтобы загрузить эти игровые ресурсы во время игры.

NSOperationQueue, кажется, явный победитель и имеет многочисленные преимущества, но я обеспокоен тем, чтобы иметь эффективный приоритетный контроль над этой «фоновой» задачей загрузки ресурсов, чтобы я мог отклонить ее с точки зрения того, сколько циклов он потребляет, так как не влиять на частоту кадров.

Я вижу, что в NSOperationQueue есть концепция «приоритета», но она выглядит иначе, чем в «NSThread»: «приоритет». Поправьте меня, если я ошибаюсь, но приоритет NSThread связан с другими потоками, работающими в системе, и приоритет NSOperation является приоритетом этой задачи по отношению к другим задачам в очереди.

То, что я хочу знать, это ....

Есть ли способ управления приоритетом заданной задачи NSOperationQueue в зависимости от того, сколько циклов (в отличие от относительного приоритета по сравнению с другими задачами в очереди) он может потреблять по сравнению с другими потоками, в настоящее время работающими на устройстве?

Безопасно ли в задаче NSOperationQueue изменить приоритет текущего потока? (с помощью NSThread's + setPriority)

1 Ответ

4 голосов
/ 21 сентября 2011

Экземпляр NSOperation также имеет метод 'setThreadPriority:' вместе с 'setQueuePriority:'.

Это определенно то, что вы ищете.

- (void)setThreadPriority:(double)priority

Указанное вами значение сопоставляется со значениями приоритета операционной системы. Указанный приоритет потока применяется к потоку только во время выполнения основного метода операции. Он не применяется во время выполнения блока завершения операции. Для параллельной операции, в которой вы создаете свой собственный поток, вы должны сами установить приоритет потока в своем пользовательском методе запуска и сбросить первоначальный приоритет после завершения операции.

...