进程vs线程:有什么不同?
什么是进程?
进程是程序的执行过程。在这个过程中,我们可以操作一些定义在程序中的功能。可以把进程定义为一个执行单元(execution unit)。程序就在这个执行单元中跑。操作系统(OS)可以帮助你创建(create),调度(schedule)和结束(terminate)供CPU使用的进程。其他有主线程创建出来的进程称为子进程。
通过PCB(Process Control Block)的帮助,你可以很容易的控制一个进程的操作。你可以把它理解为进程的大脑。这个大脑里面包含了关于进程的所有重要信息。例如进程的id,优先级,状态和CPU的寄存器内容。
什么是线程?
线程也是个执行单元。这个执行单元是进程的一部分。一个进程可以拥有多个同时执行的线程。线程是个同时编程的执行单元。线程是轻量级的而且可以被一个调度器独立操作的。它可以帮助你通过并行来提高应用程序的性能。
多线程共享包括数据,代码,文件等信息。你可以从以下三种不同的方式来实现线程:
- 内核级别线程(Kernel-level threads)
- 用户级别线程(User-level threads)
- 混合线程(Hybrid threads)
进程的性质
进程有一些重要的性质:
- 每个进程的创建需要独立的系统调用
- 进程是独立的执行实体,互相之间没有共享数据和信息
- 进程用IPC(Inter-Process Communication)机制来通讯。这使得系统调用次数大幅增加
- 进程的管理需要更多的系统调用
- 进程拥有自己的栈(stack),堆(heap)内存和数据映射
线程的性质
线程有一些重要的性质:
- 单个系统调用可以创建多个线程
- 线程之间共享数据和信息
- 线程之间共享指令,全局和堆内存。但是他们拥有自己的寄存器和栈内存
- 线程的管理开销很小。因为线程之间的交互不需要通过系统调用来完成。它们可以通过共享的内存进行交互
进程和线程的不同
![](https://img.haomeiwen.com/i14387082/a8d9134129ab7b3e.png)
下面列举一些进程和线程之间重要的不同点(都是相比较而言):
参数 | 进程 | 线程 |
---|---|---|
定义 | 进程是一个正在执行的程序 | 线程是进程的一部分 |
轻量级 | 进程不是轻量级的 | 线程是轻量级的 |
终止用时 | 终止进程所需时间更长 | 终止线程所需时间较少 |
创建用时 | 创建进程所需时间更长 | 创建线程所需时间较少 |
通讯 | 进程间的通讯需要更多时间 | 线程间的通讯需要更少的时间 |
上下文切换时间 | 进程切换上下文需要更多的时间 | 线程切换上下文需要较少的时间 |
资源 | 进程更耗资源 | 线程耗资源较少 |
对于操作系统 | 对于操作系统来说,不同进程是相互独立的 | 对于操作系统来说,所有同一级别的线程(peer threads)都被看做是同一个任务 |
内存 | 进程间基本上是相互独立的 | 线程间共享内存 |
共享 | 进程间不共享数据 | 线程间相互共享数据 |
什么是多线程?
多线程是指有多个线程在操作系统中执行。简单来说就是,有两个及以上同一个进程下的线程同时执行。
关键不同点
- 进程是指正在执行的程序,然而线程是进程的一部分
- 进程不是轻量级的,而线程是轻量级的
- 销毁进程(终止进程)耗时久,销毁线程(终止线程)耗时少
- 创建进程耗时久,创建线程耗时少
- 进程上下文切换的花销大,线程上下文切换的花销小
- 进程间相互独立,线程间共享内存
- 进程不共享数据,线程共享数据
网友评论