что означает "__workq_kernreturn" в журнале сбоев iOS или когда вы приостанавливаете выполнение приложения? - PullRequest
9 голосов
/ 03 февраля 2012

При отладке на iOS, если я приостанавливаю выполнение, я часто вижу несколько ссылок на «__workq_kernreturn».

Если в моем приложении происходит сбой, я часто вижу несколько потоков, идентифицированных как показано ниже:

Thread 19:
0   libsystem_kernel.dylib              0x332d0cd4 __workq_kernreturn + 8

Thread 20:
0   libsystem_kernel.dylib              0x332d0cd4 __workq_kernreturn + 8

Thread 21:
0   libsystem_kernel.dylib              0x332d0cd4 __workq_kernreturn + 8

Указывает ли "__workq_kernreturn" поток, который ожидает выхода, или поток, который заблокирован?Об этом стоит беспокоиться?

1 Ответ

9 голосов
/ 03 февраля 2012

Не о чем беспокоиться, если их не много.Если есть много, это говорит о том, что вы можете создавать больше потоков, чем вы, вероятно, должны, но workq_kernreturn сама по себе не является проблемой.Обычно это означает, что нить заканчивается.Источник для него доступен на opensource.apple.com , если вы хотите взглянуть на то, что он делает.

Наиболее распространенный стек, на который вы, вероятно, обращаете внимание, это:

_workq_kernreturn
_pthread_wqthread
start_wqthread

Из-за оптимизаций вы не видите там вызова _pthread_workq_return () , но это именно то, что происходит на самом деле._workq_kernreturn просто ожидает окончания спин-блокировки, чтобы он мог запустить следующую вещь в своей очереди (или выйти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...