当前位置: 首页 > 后端技术 > PHP

流程的基本概念(转载)

时间:2023-03-29 18:53:38 PHP

1.什么是流程?进程的经典定义是一个正在执行的程序的实例,是资源分配的最小单位。系统中的每个程序都在某个进程的上下文中运行,上下文由程序正确运行所需的状态组成。该状态包括存储在内存中的程序代码和数据、堆栈、通用寄存器的内容、程序计数器、环境变量和一组打开的文件描述符。进程的生命周期:创建:每个进程由其父进程创建进程可以创建子进程,子进程又可以创建子进程子进程的子进程运行:多个进程可以同时存在time进程间通信可取消:进程可被删除undo,从而结束进程的运行进程分类:交互进程、批处理进程、守护进程属性:进程ID(PID):是用来区分进程的唯一值parentprocess从父进程ID(PPID)启动进程的用户ID(UID)和组(GID)进程状态:runningR,sleepingS,zombieZ执行状态:进程正在占用CPUReady状态:进程具备所有条件,正在等待分配的CPUSlice的处理时间等待状态:进程不能使用CPU,如果正在等待事件发生可以被唤醒。2.进程和程序的区别?程序是放在磁盘上的可执行文件,进程是程序执行的实例;进程是动态的,而程序是静态的:程序是有序代码的集合。一般不能在计算机之间迁移进程;而程序通常对应于文件,是静态的,可以复制;流程是暂时的,程序是长期的:流程是状态变化的过程,程序可以长期保存;进程和程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息);进程与程序的对应关系:通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包含多个程序。3、详细解释linux中进程的作用和组成,什么是父进程和子进程?Linux系统是一个多进程系统,其进程具有并行、互不干扰的特点。也就是说,每个进程都是一个独立的运行单元,有自己的权利和责任。其中,每个进程都运行在一个独立的虚拟地址空间中,因此即使一个进程出现异常,也不会影响到系统中的其他进程。Linux中一个进程由三个段组成,分别是“数据段”、“代码段”和“堆栈段”。“数据段”存放全局变量、常量、动态数据分配的数据空间;“代码段”存放程序代码数据。“堆栈段”存放子程序的返回地址、子程序的参数、程序的局部变量。堆和栈的概念参见博文——堆和栈。父子进程:父进程和子进程之间的关系是管理和被管理的。当父进程终止时,子进程也终止;但是子进程终止,父进程不一定终止4、常用的进程管理工具有哪些?影响?ps,kill,pgrep监控进程工具:ps:auxorlax输出说明ps–aux|morepagingviewtop工具选择参数终止进程:kill[signalcode]进程号killall运行程序名pkill运行程序名xkillpgrepquery进程工具:pgrep参数选项程序名5、进程三种状态之间的转换关系常用的进程调度算法有哪些?用排队买票的例子来对比ready->execution:processinreadystate->进程调度器为其分配处理器->execution(轮到你排队买票了)execution->ready:process在执行状态->分配的时间片用完释放处理器->就绪(准备买票发现买票的时间还没有确定,让后面的人先买票)Execution->Blocking:E??xecutingprocess->Waitingforunabletocontinueexecution->Blocking(买票时发现需要做其他重要的事情,选择不买票)Blocking->Ready:Processinblockedstate->waitingsomethinghappen->Ready(路过车站帮别人买票,但不知道票的详细信息,收到了6.进程的调度算法是什么?什么是优先级反转?调度算法:first-先到先得的调度算法Short进程优先级调度算法高优先级优先调度算法时间片轮转法优先级倒置:优先级倒置是指一个低优先级任务持有一个共享资源所需的资源。高优先级任务因资源不足而阻塞,等待低优先级任务释放资源。低优先级获得较少的CPU时间。如果此时有一个优先级介于两者之间的任务,并且不需要共享资源,则中间优先级的任务将获得比这两个任务更多的CPU时间。如果等待资源的高优先级不是阻塞等待,而是忙循环,它可能永远无法获得资源,因为此时低优先级进程无法与高优先级进程竞争CPU时间,所以它无法执行,从而无法释放资源,导致的后果就是高优先级的任务无法获取资源继续推进。7.什么是死锁?死锁:多个进程因争夺资源而陷入僵局。如果没有外力,这些过程将永远无法进行。同步:一组并发进程按一定顺序执行的过程称为进程间同步互斥:指当多个进程要使用共享资源时,任何时候最多允许一个进程使用,而其他想要使用资源的进程必须等到占用资源的人释放资源。8、面试常见问题:死锁产生的原因是什么,如何解决?死锁的四个必要条件(一个不可或缺):(1)互斥条件:一种资源一次只能被一个进程使用。(2)请求和持有条件:当一个进程因请求资源而阻塞时,它会持有获得的资源。(3)非剥夺条件:进程获得的资源在用完之前不能强行剥夺。(4)循环等待条件:几个进程之间形成头尾循环等待资源关系。死锁的解决方法:(1)按相同的顺序访问对象。如果所有并发事务都以相同的顺序访问对象,则不太可能发生死锁。例如,如果两个并发事务在Supplier表上获取锁,然后在Part表上获取锁,直到其中一个事务完成,另一个事务在Supplier表上被阻塞。在第一个事务提交或回滚后,第二个事务继续。不会发生死锁。对所有数据修改使用存储过程可以规范访问对象的顺序(2)避免用户在事务中进行交互。避免编写包含用户交互的事务,因为在没有用户交互的情况下运行批处理比用户手动响应查询(例如回复应用程序请求参数的提示)要快得多。例如,如果交易正在等待用户输入,而用户去吃午饭甚至周末回家,则用户将交易搁置以使其无法完成。这会降低系统的吞吐量,因为在事务提交或回滚之前,事务持有的任何锁都不会被释放。即使没有死锁,访问同一资源的其他事务也会被阻塞,等待事务完成。(3)保持交易短小、批量化。当在同一个数据库中同时执行多个长时间运行的事务时,经常会发生死锁。事务运行的时间越长,它持有排他锁或更新锁的时间就越长,从而阻塞其他活动并可能导致死锁。将事务保持在一个批处理中可以最大程度地减少事务的网络通信往返,减少完成事务和释放锁时可能出现的延迟(4)使用低隔离级别。确定事务是否可以在较低的隔离级别运行。执行读提交允许一个事务读取已经被另一个事务读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(如提交读)而不是使用较高的隔离级别(如串行读)可以缩短持有共享锁的时间,从而减少锁争用(5)使用绑定连接。使用绑定连接可以使同一应用程序打开的两个或多个连接进行协作。辅助连接获取的任何锁都可以像主连接获取的锁一样持有,反之亦然,因此它们不会相互阻塞。