进程与线程(补充)
什么是进程
宏观来讲:
操作系统是包含多个进程的容器,而每个进程又都是容纳多个线程的容器。
Oracle文档的官方定义
进程:使用fork(2)系统调用创建的UNIX环境(例如文件描述符,用户ID等),它被设置为运行程序。
线程:在进程上下文中执行的一系列指令
进程(Process),指的是程序的一次执行。在用户下达运行程序的命令后,就会产生进程。
Java把一个类new出来,这是实例化的过程,进程就相当于代码的实例化,每一次的运行,进程都是不完全一样的,就像实例与实例之间不完全一样。
总结:进程是程序的真正运行实例,是资源分配的基本单位。
什么是线程
定义:线程是CPU的基本调度单位,每个线程执行的都是进程代码的某个片段
进程和线程的六点不同
1.起源不同
先有进程,后有线程。处理器的速度往往比外设要快,为了提高CPU的利用率,提高程序的执行效率,诞生了线程。
2.概念不同
进程是有独立功能的一个程序运行起来的活动、实例,是系统分配资源和调度的单位
线程是CPU的调度单位
3.内存共享方式不同
对于进程而言,不同的进程都会被操作系统分配到一定的内存,不同进程之间的资源通常是不共享的。进程间通讯需要使用进程间通信(IPC)
线程与线程之间内存共享容易,因为服务于同一个进程,要想服务的好,需要合作,所以两个线程之间通讯很容易,可以直接访问共享的内存,不需要额外的处理。
4.拥有的资源不同
线程是进程的一部分,拥有的资源一定少于进程。但是线程拥有一些独有的内容
1)进程代码段(重点)
2)进程的共有数据(利用这些共享的数据,线程很容易的实现相互的通讯)
3)进程打开的文件描述符
4)信号的处理器
5)进程的当前目录
6)进程用户ID与进程组ID
线程之间独有的内容
1、线程ID
2、寄存器组的值
3、线程的堆栈(重点)
4、错误返回码
5、线程的信号屏蔽码
5.进程和线程数量不同
进程一个,线程可以有多个。一个线程至少拥有一个线程,否则没有办法执行
6. 开销不同
1)线程的创建、终止时间比进程短
2)同一进程内的线程切换时间比进程切换短
3)同一进程的各个线程间共享内存和文件资源,可以不通过内核进行通信
相似点:生命周期