1.什么是进程,线程,有什么区别?
答:进程就是程序的一次动态执行过程。
线程是进程的一个实体,是进程的一条执行路径,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
区别:(1)调度:线程为调度和分派的基本单位,进程为拥有资源的基本单位。
(2)并发性:不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行。
(3)拥有资源:线程拥只拥有一点必不可少的资源(例如栈)--》轻量级的进程,但可访问隶属进程的 资源。
(4)系统开销:控制进程明显大于控制线程的开销。
2.多线程,多进程得到优缺点。
答:
多进程优点:
1、每个进程相互独立,不影响主程序的稳定性,子程序崩溃没关系;
2、通过增加CPU,就可以扩充性能;
3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。
多进程缺点:
1、逻辑控制复杂,需要和主程序交互;
2、需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算。多进程调度开销比较大;
3、最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题;
4、方法和手段的多样的,关键是自己看起来实现方便又能够满足要求,代价也合适。
多线程优势:
- 无需跨进程边界;
- 程序逻辑和控制方式简答;
- 所有线程可以直接共享内存和变量等;
- 线程方式消耗的总资源比进程方式好。
多线程缺点:
1、每个线程与主程序公用地址空间,受限于2GB地址空间;
2、线程之间的同步和加锁控制比较麻烦;
3、一个线程的崩溃可能影响到整个程序的稳定性;
4、到达一定的线程数程度后,即使再增加CPU也无法提高性能。
5、线程能够提高的总性能有限,而且流程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。
3.什么时候用进程,什么时候用线程。
答:1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。
2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应
3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;
5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。
4.多进程,多线程同步(通讯)的方法。
答:
多进程:
- 有名管道/无名管道
- 信号
- 共享内存
- 消息队列
- 信号量
- 套接字
多线程:
- 信号量
- 读写锁
- 条件变量
- 互斥锁
- 信号
5.进程线程的状态转换图。
6.父进程,子进程。
答:
父进程:
是指创建其他进程的进程。当一个进程创建了一个新的进程,新进程就成为了父进程的子进程。父进程可以创建多个子进程,但是每个子进程只有一个父进程。
子进程:
是由父进程创建的进程。子进程继承了父进程的一些属性和资源,并且可以执行不同的代码。子进程可以创建自己的子进程,形成进程树的结构。