Как XPC-соединения обрабатываются поточно?
Допустим, у меня есть служба XPC и два видимых пользователю приложения (пункт меню и основное приложение). Оба подключаются к службе XPC.
Если оба эти компонента приложения отправляют сообщение "create Foo", как они отправляются? В конце концов, это один процесс, так что они поступают в последовательности или будут использоваться несколько очередей?
Служба XPC использует Core Data, поэтому я беспокоюсь о том, нужно ли мне создавать глобальную очередь или каким-либо другим образом обеспечивать ограничение потока.
1 ответ
Каждый раз, когда вы используете CoreData, XPC или нет, в не-однопоточном исполняемом файле вам нужно адресовать многопоточность, либо через ограничение, только основной поток или частную очередь. Поскольку службы XPC не имеют столь четко определенной концепции основного потока (очевидно, существует первый поток, который навсегда будет основным, но практически говоря...) NSMainQueueConcurrencyType
вероятно не полезно. Я не видел никаких указаний на то, что XPC дает какие-либо обещания относительно привязки потоков к запросам, поэтому я обычно исходил из предположения, что управление потоками в прослушивателе XPC является деталью реализации, над которой у меня нет контроля (до тех пор, пока выполнение не перейдет в мой код). С этим в мыслях, NSConfinementConcurrencyType
выглядит как куча работы. Так что, если бы это был я, я бы NSPrivateQueueConcurrencyType
,
Даже если вы эмпирически наблюдали за выполнением только одного запроса, было бы лучше, если бы это не гарантировалось.