目录
1、什么是进程、线程,有什么区别?
进程是资源(CPU、内存等)分配的基本单位,线程是CPU调度和分配的基本单位(程序执行的最小单位)。同一时间,如果CPU是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,你以为这些进程在同步执行而已。多核CPU可以同一时间点有多个进程在执行。
2、什么时候用进程,什么时候用线程
1)创建和销毁较频繁使用线程,因为创建进程花销大。 2)需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。 3)安全稳定选进程;快速频繁选线程;
3、多进程、多线程同步(通讯)的方法
进程间通讯: (1)有名管道/无名管道(2)信号(3)共享内存(4)消息队列(5)信号量(6)socket 线程通讯(锁): (1)信号量(2)读写锁(3)条件变量(4)互斥锁(5)自旋锁
4、多进程、多线程的优缺点
优缺点:1)一个进程死了不影响其他进程,一个线程崩溃很可能影响到它本身所处的整个进程。 2)创建多进程的系统花销大于创建多线程。 3)多进程通讯因为需要跨越进程边界,不适合大量数据的传送,适合小数据或者密集数据的传送。多线程无需跨越进程边界,适合各线程间大量数据的传送。并且多线程可以共享同一进程里的共享内存和变量。
5、父进程、子进程
父进程调用fork()以后,克隆出一个子进程,子进程和父进程拥有相同内容的代码段、数据段和用户堆栈。父进程和子进程谁先执行不一定,看CPU。所以我们一般我们会设置父进程等待子进程执行完毕。
6、说明什么是上下文切换?
你可以有很多角度,有进程上下文,有中断上下文。 进程上下文:一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 中断上下文:由于触发信号,导致CPU中断当前进程,转而去执行另外的程序。那么当前进程的所有资源要保存,比如堆栈和指针。保存过后转而去执行中断处理程序,快读执行完毕返回,返回后恢复上一个进程的资源,继续执行。这就是中断的上下文。
7、进程
系统中可以有无父进程的进程 3、进程的同步是直接的制约关系,进程的互斥是量个进程互相竞争资源,通过临时资源产生了间接的制约关系
8、进程2
一、什么是进程: 进程是程序执行和资源管理的最小单位。 二、进程的分类 1、交互式进程:可以在前台运行,也可以在后台运行。 2、批处理进程:不必与用户交互,通常在后台运行 3、守护进程(重点):一直在后台运行,系统启动时开启,系统结束是关闭。
9、进程的状态
1、运行态,等待态,停止态,死亡态,僵尸态 2、进程状态图(进程的状态转换): 创建->就绪态-(进程被调度)->运行态-(时间片到了)>就绪态 运行态-(运行结束或者遇到错误)->停止态 运行态-(程序请求资源或者等待某个事件的发生)->等待态-(事件发生了或请求资源被分配)->就绪态
10、死锁的原因、条件
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
11、创建进程的方式
1、fork 2、vfork fork和vfork的区别 1、fork拷贝父进程的数据段,vfork和父进程共享数据段 2、fork父子进程运行顺序不确定,vfork优先运行子进程,要在子进程使用了exec或者_exit后父进程才可以运行。 子进程几乎继承了父进程的所有资源 不继承地址空间
12、如何看待僵尸进程
1、当子进程结束父进程没有结束时,父进程没有回收子进程的资源,那么这个子进程会变成僵尸进程。 二、如何处理僵尸进程 答:父进程在子进程结束后使用wait函数或者是waitpid函数回收子进程的资源。 wait函数是阻塞的 waitpid函数可以是阻塞的也可以是非阻塞的。 exec组的作用是可以是父子进程分别运行不同的程序而但在宏观上是同时进行的
13、进程间通信的方式
1、有名管道2、无名管道3、信号4、信号量5、共享内存6、消息队列 7、socket套接字
14、守护进程
如何创建一个守护进程?? 第一步(创建一个孤儿进程):创建一个子进程,父进程退出。 第二步:设置新的会话(进程的集合) 第三步:设置工作目录 第四步:重设文件掩码 第五步:关闭从父进程继承下来的文件描述符 第六步:周期性的执行任务