XPC 连接是如何按线程处理的?

How are XPC connections handled thread-wise?

假设我有一个 XPC 服务和两个用户可见的应用程序(菜单栏项和主应用程序)。两者都连接到 XPC 服务。

如果这两个应用程序组件都发送 "create Foo" 消息,它们是如何发送的?毕竟是单进程,是顺序到达还是多队列?

XPC 服务使用 Core Data,所以我担心是否必须创建全局队列或以任何其他方式确保线程限制。

无论何时使用 CoreData、XPC 或不使用,在非单线程可执行文件中都需要通过限制、仅主线程或专用队列来解决线程问题。由于 XPC 服务没有明确定义的主线程概念(显然,第一个线程将永远是主线程,但实际上......)NSMainQueueConcurrencyType 可能没有用。我没有看到任何迹象表明 XPC 对请求的线程亲和性做出了任何承诺,所以我通常假设 XPC 侦听器的线程管理是一个我无法控制的实现细节(直到执行过渡到我的代码)。考虑到这一点,NSConfinementConcurrencyType 看起来像是一堆工作。所以,如果是我,我会 运行 和 NSPrivateQueueConcurrencyType

即使您凭经验观察到一次只执行一个请求,您最好假设这不能保证。