进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
当前回答
线程和进程之间的区别?
进程是应用程序的执行实例,线程是进程内的执行路径。此外,一个进程可以包含多个线程。需要注意的是,一个线程可以做一个进程所能做的任何事情。但是,由于一个进程可由多个线程组成,因此可以将一个线程视为“轻量级”进程。因此,线程和进程之间的本质区别在于每个线程用来完成的工作。线程用于小型任务,而进程用于更“重量级”的任务——基本上是应用程序的执行。
线程和进程之间的另一个区别是,同一进程中的线程共享相同的地址空间,而不同的进程不共享。这允许线程读取和写入相同的数据结构和变量,也方便了线程之间的通信。进程之间的通信(也称为IPC或进程间通信)非常困难,而且资源密集。
这里总结了线程和进程之间的区别:
线程比进程更容易创建,因为它们不需要单独的地址空间。多线程需要仔细编程,因为线程共享只能由一个线程修改的数据结构一次。与线程不同,进程不共享相同的地址空间。线程被认为是轻量级的,因为它们使用资源少于流程。流程彼此独立。线程,因为它们共享同一地址空间是相互依赖的,因此请谨慎必须采取措施,以使不同的线程不会相互踩踏。这真的是另一种方式来说明上面的#2。一个进程可以由多个线程组成。
其他回答
示例1:JVM在单个进程中运行,JVM中的线程共享属于该进程的堆。这就是为什么多个线程可以访问同一个对象。线程共享堆并拥有自己的堆栈空间。这就是一个线程对方法及其局部变量的调用如何保持与其他线程的线程安全。但是堆不是线程安全的,必须同步以确保线程安全。
流程:
过程是一个沉重的过程。进程是一个单独的程序,具有单独的内存、数据、资源等。进程是使用fork()方法创建的。进程之间的上下文切换非常耗时。
例子:比如,打开任何浏览器(mozilla、Chrome、IE)。此时,新流程将开始执行。
线程:
线程是轻量级进程。线程被捆绑在进程内部。线程具有共享内存、数据、资源、文件等。线程是使用clone()方法创建的。线程之间的上下文切换不像Process那样耗时。
进程是代码、内存、数据和其他资源的集合。线程是在进程范围内执行的一系列代码。您可以(通常)在同一进程中同时执行多个线程。
进程和线程的真实示例这将为您提供有关线程和进程的基本信息
我从Scott Langham的回答中借用了上述信息-谢谢
以下是我从代码项目的一篇文章中得到的内容。我想它清楚地解释了所需的一切。
线程是另一种将工作负载拆分为单独的执行流。线程的重量比进程轻。这这意味着,它提供的灵活性不如全面流程,但可以启动速度更快,因为操作系统设置当程序由两个或多个线程组成时线程共享单个内存空间。进程被赋予单独的地址空间。所有线程共享一个堆。但每个线程都有自己的堆栈。