什么是进程,什么是线程
进程:进程是一个正在运行的程序,在操作系统角度讲,进程就是一个pcb,是操作系统对一个正在运行的程序的描述,通过这个描述实现对程序的调度管理,它在linux中是一个task_struct结构体。pcb是进程控制块:标识符、状态、优先级、程序计数器(及即将被执行的下一条指令地址)、上下文。 线程:线程就是进程中的一条执行流,是cpu调度的基本单元,这个执行流在linux下是通过pcb实现的,共享了进程的大部分资源,相比进程更加轻量化,所以线程也被称为轻量级进程。
进程和线程的区别
- 进程是资源分配的最小单位,线程是cpu调度的最小单位。
- 进程拥有独立的系统资源,而同一进程内的线程共享进程的大部分系统资源
- 一个进程崩溃,不会对其他进程产生影响;一个线程崩溃会让同同一进程内的其他线程也死掉
- 进程在创建、切换和销毁开销比线程大
- 进程间通信比较复杂,而同一进程的线程由于共享代码段和数据段,所以通信比较荣容易
线程独有:线程ID(用来区分每个线程)、程序计数器(即将被执行下一条指令的地址)、寄存器的值(线程执行所保存的上下文环境)、堆(防止栈混乱)、优先级 线程共享:全局变量、虚拟地址空间、堆、文件描述符、信号处理的回调函数
进程间通信方式
管道、共享内存、消息队列、信号量、套接字、信号
- 管道是内核中的一块缓冲区,多个进程可以拿到这块缓冲区的操作句柄就可以实现进程间通信,管道分为匿名管道和命名管道。匿名管道只能用于具有亲缘关系的进程间;而命名管道可以由于同一主机上任意进程间通信。
- 共享内存的本质就是一块物理内存,多个进程将同一块物理内存映射到自己的虚拟地址空间中,再通过页表映射到物理地址到达进程间通信,他是最快的进程间通信的方式,相较其他通信方式少了两步数据拷贝操作。
- 消息队列是内核中的一个优先级队列,多个进程通信访问同一个队列,在队列中添加或者获取节点来实现进程间通信。
- 信号量的本质就是内核中的一个计数器,主要实现进程间的同步和互斥,对资源进行计数,有两种操作,分别是在访问资源之前进行的p操作还有长生资源后的v操作。
- 套接字主要用于网络上同一主机或者不同主机上的进程间通信,可以将两端分为客户端和服务端,两端只要知道五元组就可以进行通信
- 信号是处理异步事件的方式,可以用于通知进程某个事件的发生。
|