"__workq_kernreturn"在iOS崩溃日志中或暂停执行应用程序时的含义是什么?

Vic*_*ram 9 unix iphone objective-c ipad ios

在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
Run Code Online (Sandbox Code Playgroud)

"__workq_kernreturn"是否表示正在等待退出的线程,或者是一个死锁的线程?这有什么值得担心的吗?

Rob*_*ier 9

除非有很多,否则没什么好担心的.如果有很多,这表明你可能会产生比你应该更多的线程,但这workq_kernreturn本身仍然不是问题.它通常意味着线程正在完成.如果您想了解它的作用,可以在opensource.apple.com上找到它的来源.

你可能正在看的最常见的堆栈就是这个:

_workq_kernreturn
_pthread_wqthread
start_wqthread
Run Code Online (Sandbox Code Playgroud)

由于优化,你在那里看不到对_pthread_workq_return()的调用,但这就是实际发生的事情._workq_kernreturn只是等待自旋锁完成所以它可以在其队列(或退出)上运行下一个东西.

  • 我从devforums上的Apple工程师那里收到的回复是"忽略它们.那些正在等待工作的GCD调度工作线程.他们可能会被分配工作以后再做,或者如果他们闲置的时间足够长,他们可能会退出." (11认同)