进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
当前回答
进程:正在执行的程序称为进程
线程:线程是一种基于“一个与另一个”的概念与程序的其他部分一起执行的功能,因此线程是进程的一部分。。
其他回答
对于那些更喜欢通过可视化学习的人来说,这里是我创建的一个方便的图表,用于解释流程和线程。我使用了MSDN中的信息-关于进程和线程
基本上,线程是进程的一部分,如果没有进程线程就无法工作。线程是轻量级的,而进程是重量级的。进程之间的通信需要一些时间,而线程需要更少的时间。线程可以共享同一个内存区域,而进程则单独存在。
来自Erlang编程(2009):Erlang并发是快速和可扩展的。它的进程是轻量级的,因为Erlang虚拟机不会为每个创建的进程创建OS线程。它们在VM中创建、调度和处理,与底层操作系统无关。
Erlang实现了一个抢先调度程序,它允许每个进程在一段设定的时间内运行,而不会阻塞系统线程太长时间,这给了每个进程一些执行的cpu时间。如果我没有弄错的话,系统线程的数量取决于内核的数量,如果负载变得不均匀,进程可以从一个线程中删除,然后移动到另一个线程,这都是由Erlang调度程序处理的。
以下是我从代码项目的一篇文章中得到的内容。我想它清楚地解释了所需的一切。
线程是另一种将工作负载拆分为单独的执行流。线程的重量比进程轻。这这意味着,它提供的灵活性不如全面流程,但可以启动速度更快,因为操作系统设置当程序由两个或多个线程组成时线程共享单个内存空间。进程被赋予单独的地址空间。所有线程共享一个堆。但每个线程都有自己的堆栈。
关于并发编程的更多解释
流程有一个独立的执行环境。一个进程通常有一套完整的、私有的基本运行时资源;特别是,每个进程都有自己的内存空间。
线程存在于一个进程中-每个进程至少有一个线程。线程共享进程的资源,包括内存和打开的文件。这有助于高效但可能存在问题的沟通。
来源:Java™ 教程:进程和线程
记住普通人的一个例子:
在计算机上,打开Microsoft Word和web浏览器。我们称这两个过程为。
在Microsoft Word中,您键入一些内容,它会自动保存。现在,您已经观察到编辑和保存是并行进行的——在一个线程上编辑,在另一个线程中保存。