为 UI 的一部分创建另一个进程是个好主意吗?
Is creating another process for a part of the UI a good idea?
抱歉,我无法在此处 post 专有代码。基本上,它是一个 Mac GUI 应用程序。代码设计不当,无法利用 异步性 概念。一切都在主线程上处理,不可能一夜之间改变设计。因此,我不想使用 dispatch_async(…) 解决方案。
问题的上下文是:我有一个耗时的任务在主线程上运行。在处理任务时,我尝试 update/redraw 基于任务完成百分比(从 0% 到 100%)的进度条 (NSProgressIndicator)。但是由于任务运行在主线程上,主线程是阻塞的,事件队列中的任何update/redraw事件都要等到主线程有机会查看,所以进度条是没有的updated/redrawn 在任务执行期间完全没有。
我正在考虑的解决方案是创建另一个处理进度条绘图的应用程序(带有 .exe 文件)。在主应用程序中,我将创建另一个进程并让该进程执行另一个应用程序。可以使用 Boost inter-process message queue.
将任务的完成百分比从主应用发送到其他应用
我希望听到这个解决方案的优点和缺点,所以任何想法都将不胜感激!
您也可以从同一进程中的线程执行此操作。进程间消息队列仍然有效,尽管任何线程安全解决方案都足够了。
一般来说,运行在进程外执行一些重要的任务是值得的。内核级进程隔离具有线程永远无法拥有的优势:
- 内存space分离(安全)
- 特权分离(另一个进程可能 运行 在不同的安全上下文中)
因此在处理不受信任的输入或不可靠的第三方库代码时,您可以获得主进程的稳定性保证。
然而,就您的目的而言,这听起来有点矫枉过正。
抱歉,我无法在此处 post 专有代码。基本上,它是一个 Mac GUI 应用程序。代码设计不当,无法利用 异步性 概念。一切都在主线程上处理,不可能一夜之间改变设计。因此,我不想使用 dispatch_async(…) 解决方案。
问题的上下文是:我有一个耗时的任务在主线程上运行。在处理任务时,我尝试 update/redraw 基于任务完成百分比(从 0% 到 100%)的进度条 (NSProgressIndicator)。但是由于任务运行在主线程上,主线程是阻塞的,事件队列中的任何update/redraw事件都要等到主线程有机会查看,所以进度条是没有的updated/redrawn 在任务执行期间完全没有。
我正在考虑的解决方案是创建另一个处理进度条绘图的应用程序(带有 .exe 文件)。在主应用程序中,我将创建另一个进程并让该进程执行另一个应用程序。可以使用 Boost inter-process message queue.
将任务的完成百分比从主应用发送到其他应用我希望听到这个解决方案的优点和缺点,所以任何想法都将不胜感激!
您也可以从同一进程中的线程执行此操作。进程间消息队列仍然有效,尽管任何线程安全解决方案都足够了。
一般来说,运行在进程外执行一些重要的任务是值得的。内核级进程隔离具有线程永远无法拥有的优势:
- 内存space分离(安全)
- 特权分离(另一个进程可能 运行 在不同的安全上下文中)
因此在处理不受信任的输入或不可靠的第三方库代码时,您可以获得主进程的稳定性保证。
然而,就您的目的而言,这听起来有点矫枉过正。