我们说我有一个XPC服务和两个用户可见的应用程序(菜单栏项和主应用程序)。两者都连接到XPC服务。
如果这两个应用程序组件都发送了"创建Foo"消息,他们是如何派遣的?毕竟它是一个单一的过程,它们是按顺序到达还是会使用多个队列?
XPC服务使用核心数据,因此我担心是否必须以任何其他方式创建全局队列或确保线程限制。
答案 0 :(得分:1)
无论何时使用CoreData,XPC,在非单线程可执行文件中,您都需要通过限制,仅限主线程或私有队列来解决线程问题。由于XPC服务没有明确定义主线程的概念(显然,第一个线程将永远是主线程,但实际上是......)NSMainQueueConcurrencyType
可能不是有用。我没有看到任何迹象表明XPC对请求的线程关联性做出任何承诺,所以我通常假设XPC监听器的线程管理是一个我无法控制的实现细节。 (直到执行过渡到我的代码)。考虑到这一点,NSConfinementConcurrencyType
看起来像是一堆工作。所以,如果是我,我会使用NSPrivateQueueConcurrencyType
。
即使你凭经验观察到只有一个请求一次执行,你最好还是假设不能保证。