2013-12-17 29 views
0

我的Cocoa應用程序需要同時呈現許多批生成的網頁。由於WebKit WebView呈現僅限於主線程,因此我無法在應用程序的進程中使用GCD來完成此任務,因此我正在考慮使用某種進程間解決方案。使用XPC並行化Cocoa WebView呈現

NSXPCConnection是明顯的選擇,因爲它與沙箱配合良好,透明地代理了我需要使用的所有Core Foundation類型。但是,它似乎只爲每個服務創建一個進程,這隻會將我的主線程限制移到不同的進程中,並且不會讓我並行化多個呈現請求。有什麼辦法可以說服XPC系統爲同一個服務分叉多個進程,可能使用C API(xpc_connection_create等)?

在這一點上,我正在考慮製作一打相同的XPCServices具有不同名稱的包,並將其連接到某個特定批次的並行渲染請求中閒置的那些包,但這看起來很愚蠢。

回答

0

FWIW,我與Apple打開了一個技術支持問題,他們回答說「沒有支持的方式來實現所需的功能,因爲目前的發貨系統配置」,所以我想這是無法完成的。

我最終創建了20個相同的XPC服務並啓動[[NSProcessInfo processInfo] processorCount]實例,我手動管理與它們的通信。它實際上運行得非常好,我可以用渲染任務最大化所有處理器。

+0

我正在使用一個類似的設置,你在這裏描述了一個我正在處理的應用程序。但是,我的服務相當不可靠,並且隨機出現一個EXC_BAD_ACCESS頻繁崩潰。它幾乎看起來像WebView並不快樂。我的XPC服務只不過是在主線程上創建WebView的基本服務包裝器,它在加載URL並在完成時返回報告。您是否需要在服務中做任何「特殊」的事情才能使WebView開心?我將RunLoopType更改爲NSRunLoop,並在適當的位置強制主線程。還要別的嗎? – kennyc