进程?
进程=程序段+数据段+进程控制段
1)进程是一个运行起来的程序,程序在运行的时候需要加载到内存,进程是操作系统资源分配的基本单位
2)进程在linux下就是也可以说是一个PCB(进程控制块),实际上是一个task_struct结构体,底层实现上是一个双向链表 ps -ef(查看所有标准进程)
3)标识符(PID),状态(僵尸"资源泄漏"、运行、停止、可中断/不可中断睡眠),优先级,上下文数据,内存指针、程序计数器(即将执行的下一条指令的地址)
fork() exit() wait()//进程等待 防止僵尸进程产生的主要方式
进程程序替换(创建子进程的主要目的是分流)
进程间通信(system V环境下)pipe fifo shm msg sem
线程?
一个程序的一个执行路线叫做线程
1)线程是一个进程内部的控制序列,任何一个进程至少有一个执行路线,将进程的资源合理的分配给每个执行流,就形成了线程执行流
2)Linux下的线程都是用进程PCB模拟的(轻量化线程),线程是CPU调度的基本单位
Linux下线程共用进程的虚拟地址空间优缺:
优:线程的创建/销毁成本低,切换调度成本低,线程之间通信方便
缺:线程安全(缺乏访问控制)【通过互斥锁/条件变量来解决】,对临界资源的访问容易导致数据混乱,系统调用会对整个进程产生影响
线程共享:文件状态表、信号处理方式、工作目录
线程独有:上下文数据、线程id,全局变量