线程和进程 链接
概念
进程是资源分配的最小单位,线程是CPU调度的最小单位
进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同
进程的cpu时间段包括:t1 + cpu程序执行时间 + t2
注: 分配或回收资源(如内存空间、I/O 设备等),即cpu运行环境加载时间t1和cpu保存运行环境配置时间t2
线程的cpu时间段包括:进程的cpu程序执行时间的一部分
比如要实现程序A,实际分成 a,b,c等多个块组合而成,程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,线程是共享了进程的上下文环境,的更为细小的CPU时间段。
区别
- 拥有资源
进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源
- 调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
- 系统开销
由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
- 通信方面
线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
进程间通信方式(IPC)
- 管道
在内核中申请一块固定大小的缓冲区,半双工通信,程序拥有读写权限,包括匿名管道(只允许父子进程通信)和命名管道(所有进程都可以通信)
- 消息队列
拥有一个进程向另一个进程发送数据的方法。全双工通信
- 信号量
可以对临界资源进行保护
- 共享内存
关机数据消失
- socket