进线程
1. 什么是进程,什么是线程,区别在那?
- 进程是系统资源分配的基本单位,线程是程序执行的最小单位,一个进程可以包含多个线程
- 进程有自己独立的地址空间,每新建一个进程,系统都会给进程分配独立的地址空间,建立数据表来维护代码段,数据段,堆栈段,并且进程的全局变量是不共用的,线程是以来进程的地址空间,因此切换一个线程远比切换一个进程的空间少
- 线程之间通信更方便,一个进程下的线程共享全局变量和静态数据,线程有自己的寄存器组和栈段
2. 何时使用多进程,何时使用多线程?
- 频繁修改:需要频繁创建和销毁资源使用多进程
- 数据共享/相关性:需要频繁数据共享使用多线程
- 计算量:计算量大使用多线程
3. 创建进程的方式?
- fork()
- 系统初始化,像是后台进程或是守护进程
- 用户的交互式请求
4, 进程的几种状态
创建,就绪,阻塞,运行,终止
5. 进程间的通信方式
- 管道(pipe)
- 信号量
- 消息队列
- 信号
- 共享内存
- 套接字
进程间通信的选择
数据交互频繁使用管道
数据量大使用共享内存
6.什么是僵尸进程,孤儿进程,守护进程
- 僵尸进程:子进程退出后没有被父进程使用wait()或waitpid()回收资源
- 孤儿线程:父进程在没有回收子进程的情况下异常推出,子进程此时会被init进程收养
- 守护进程:是指后台进程,有意把父进程结束,然后被1号进程收养
僵尸进程的危害
如果一直产生僵尸进程,系统的进程号会被占用而无法产生新的进程
线程间的通信方式
- 临界区
- 信号量
- 互斥量
- 事件
- 条件变量
- 读写锁