进程和线程的区别探讨
进程和线程
-
进程切换代价
-
直接代价:页表全局目录、TLB、内核堆栈、硬件上下文、执行调度器代码
-
间接代价:缓存失效(尤跨CPU调度)、cpu直接访存数量增加(差三个数量级)
-
进程间通信
- 管道、套接字、系统IPC(消息队列、信号量、信号、共享内存)
- 普通管道:只用于亲戚进程通信。半双工通信,具有固定读端和固定写端,是只存在于内存的特殊文件
- 具名管道:可用于非亲缘关系进程间通信,两者承载字节流数据,缓冲区有限
- 消息队列:存放于内核中的消息链表,每个消息具有一个队列ID,是面向记录的、具有特定格式和优先级的消息机制。
- 信号量:控制多进程访问共享资源,是一个实现了进程间互斥和同步的计数器
- 信号:软终端,通知进程事件的发生
- 共享内存:多个进程共同访问同一块内存空间,需要依靠互斥锁和信号量同步共享
- 套接字:TCP/IP协议
-
线程间通信
- 互斥锁、条件变量、读写锁
-
线程共享的资源
- 进程共有数据、进程代码段、信号处理器、进程打开的文件描述符、进程工作目录、进程ID进程组ID
-
线程独享的资源
- 线程ID、线程栈、寄存器组值、错误返回码、信号屏蔽字、线程优先级
-
进程终止
- 1)main return;2)exit;3)最后一个线程return;4)最后一个线程pthread_exit;5)abort;6)信号;7)最后一个线程回应取消
-
vfork
- 保证子进程先运行;不完全复制父进程地址空间;子进程执行exec后,父进程才被调度运行