原文链接:http://www.differencebetween.info/difference-between-process-and-thread
关键差异:在多线程中,线程和进程是两个联系紧密的术语。两个术语的主要差异是线程是进程的一部分。例如,一个进程可以包含一个或者多个线程,但是一个线程不能包含某个进程。
在程序中,有两个基本的执行单元:进程和线程。他们都执行一系列的指令。他们都是由某个程序或者操作系统启动。这篇文章帮助你去区分这两个单元。
一个进程是一个运行中的程序的实例。它包含了程序代码和它当前的活动。依赖于操作系统,一个进程可以由多个同时执行指令的执行线程构成。一个程序是一系列指令的集合;一个进程是这些指令的实际执行。
进程有一个独立的执行环境,它拥有一套完整的私有的基本运行时资源。尤其是,每个进程拥有自己的内存空间。进程通常被认为与其他程序或应用程序相似。然而,单个应用程序的运行实际上可能是一组协作的进程。方便进程的通信,大多数操作系统使用IPC(进程间通信)资源,例如管道和套接字(sockets)。IPC资源也可用于不同系统上的进程之间的通信。虚拟机中的大多数应用程序作为单个进程运行。但是,它可以使用进程构建器对象创建其他进程。
在计算机中,线程甚至可以执行可由操作系统独立管理的编程指令的最小序列。线程和进程的应用程序因操作系统而异。但是,线程由进程构成并存在于进程中。每个进程至少有一个线程。多个线程可以存在于一个进程,共享资源,这有助于线程之间的高效通信。
在单处理器中,处理器在不同线程之间切换时进行多任务处理。它被称为多线程。切换发生的很频繁以至于线程或任务被用户认为是同时运行的。线程在多处理器或多核系统可以真正的同时运行,每个处理器或者核心同时执行单独的线程。
综上所述,线程可以认为是轻量级的进程,因为他们包含简单的指令集合,可以在一个更大的进程运行。计算机可以同时运行多线程和多进程。
比较进程和线程:
名称 | 进程 | 线程 |
---|---|---|
定义 | 一个程序的正在执行的实例叫做进程 | 线程是进程的子集 |
进程 | 它有自己的父进程的数据段副本 | 它可以直接访问其进程的数据段 |
通信 | 进程必须使用进程间通信才可以和兄弟进程通信 | 线程可以直接和同一进程的其他线程通信 |
开销 | 进程有大量的开销 | 线程几乎没有开销 |
创建 | 新进程要求父进程的副本 | 新线程创建很容易 |
控制 | 进程只能控制子进程 | 线程可以对处于相同进程的线程进行控制 |
改变 | 父进程的任何改变都不会影响子进程 | 主线程的所有改变可以影响进程中其他线程的行为 |
内存 | 在单独的内存空间运行 | 共享内存空间 |
文件描述符 | 大多数文件描述符不共享 | 共享文件描述符 |
文件系统 | 没有文件系统上下文共享 | 共享文件系统上下文 |
信号 | 不共享信号处理 | 共享信号处理 |
被控制 | 进程由操作系统控制 | 线程由开发者在程序中控制 |
依赖 | 进程是独立的 | 线程不是独立的 |