进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
进程和线程之间的技术区别是什么?
我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
当前回答
将流程视为一个所有权单位或任务所需的资源。进程可以具有内存空间、特定输入/输出、特定文件和优先级等资源。
线程是一个可调度的执行单元,或者简单地说是一系列指令的进程
其他回答
同一进程中的线程共享内存,但每个线程都有自己的堆栈和寄存器,线程在堆中存储线程特定的数据。线程从不独立执行,因此与进程间通信相比,线程间通信要快得多。
进程从不共享相同的内存。当子进程创建时,它会复制父进程的内存位置。进程通信通过使用管道、共享内存和消息解析来完成。线程之间的上下文切换非常缓慢。
每个进程都是一个线程(主线程)。但每个线程都不是一个进程。它是流程的一部分(实体)。
将流程视为一个所有权单位或任务所需的资源。进程可以具有内存空间、特定输入/输出、特定文件和优先级等资源。
线程是一个可调度的执行单元,或者简单地说是一系列指令的进程
此信息可在Microsoft了解此处:关于进程和线程
过程每个进程提供执行程序所需的资源。进程具有虚拟地址空间、可执行代码、系统对象的开放句柄、安全上下文、唯一进程标识符、环境变量、优先级类、最小和最大工作集大小以及至少一个执行线程。每个进程都由一个线程启动,通常称为主线程,但可以从其任何线程创建其他线程。线线程是进程中的一个实体,可以被安排执行。进程的所有线程共享其虚拟地址空间和系统资源。此外,每个线程都维护异常处理程序、调度优先级、线程本地存储、唯一的线程标识符以及系统将用于保存线程上下文的一组结构,直到它被调度。线程上下文包括线程的一组机器寄存器、内核堆栈、线程环境块和线程进程地址空间中的用户堆栈。线程也可以有自己的安全上下文,可用于模拟客户端。Microsoft Windows支持抢占式多任务处理,这会产生多个进程同时执行多个线程的效果。在多处理器计算机上,系统可以同时执行计算机上处理器的数量。
来自Erlang编程(2009):Erlang并发是快速和可扩展的。它的进程是轻量级的,因为Erlang虚拟机不会为每个创建的进程创建OS线程。它们在VM中创建、调度和处理,与底层操作系统无关。
Erlang实现了一个抢先调度程序,它允许每个进程在一段设定的时间内运行,而不会阻塞系统线程太长时间,这给了每个进程一些执行的cpu时间。如果我没有弄错的话,系统线程的数量取决于内核的数量,如果负载变得不均匀,进程可以从一个线程中删除,然后移动到另一个线程,这都是由Erlang调度程序处理的。