Bob*_*Bob 6 c multithreading process
我知道如果你的程序有大段可以并行执行,那么当实例没有被单个资源绑定时,产生新线程将是有益的.例如,Web服务器发出页面请求.
从线程间通信成本低得多且上下文切换快得多的方面来看,线程是有益的.
进程可以从一个进程无法"混乱"另一个进程内容的方面为您提供更多安全性,而如果一个线程崩溃,则所有线程可能会在所述进程内崩溃.
我的问题是,有什么例子可以说明你何时想要使用一个进程(例如在C中使用fork())?
我可以想一想,如果你有一个想要启动另一个程序的程序,将它封装在一个新进程中是有意义的,但我觉得我错过了启动一个新进程的一些更大的理由.
具体来说,什么时候让一个程序产生一个新的进程vs线程是有意义的?
使用进程的主要原因是进程可能会崩溃或变得疯狂,操作系统将限制这对其他进程的影响。例如,Firefox 最近开始在单独的进程中运行插件,IIRC Chrome 在不同的进程中运行不同的页面,而 Web 服务器长期以来一直在单独的进程中处理单独的请求。
操作系统应用限制有几种不同的方式:
使用进程的另一个潜在原因是它可以更轻松地推理代码。在多线程代码中,您依赖所有类的不变量来推断对特定对象的访问是序列化的:如果您的代码不是多线程的,那么您就知道它是[*]。当然,也可以使用多线程代码来执行此操作,只需确保知道哪个线程“拥有”每个对象,并且永远不要从不是其所有者的线程访问对象。流程边界强制执行这一点,而不仅仅是为其设计。同样,不确定这是否是动机,但例如 World Community Grid 客户端可以使用多个内核。在这种模式下,它运行多个进程,每个进程中都有完全不同的任务,因此它具有附加内核的性能优势,不需要任何单独的任务可并行化,或者任何任务的代码都需要是线程安全的。
[*] 好吧,只要它不是在共享内存中创建的。您还需要避免意外的递归调用等,但这通常是比同步多线程代码更简单的问题。