0

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

如果这两个应用程序组件都发送“create Foo”消息,它们是如何分派的?毕竟这是一个进程,所以它们是按顺序到达还是会使用多个队列?

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

4

1 回答 1

1

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

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

于 2015-03-18T12:28:35.157 回答