关于协同例程

子例程(subroutine)是经常使用的一种程序流程,父例程在调用子例程的时候暂时中断自身的流程,将控制转到子例程的起点,然后一直到子例程返回才继续父例程的流程。这是一种栈式的调用,就是说后进入的子例程,却要先返回。因此许多程序都是用栈来存放子例程的局部运行环境,因为当子例程返回后,这个局部的运行环境就不需要了,也就是后进先出。

然而,有些例程之间并不是父例程调用子例程这种嵌套的关系,而是并行的协同关系,当一个例程运行时,需要另外一个例程所不断产生的结果,例如两个通过管道连接的程序就是这样的关系。例程A需要数据,就把控制传递到例程B,而B产生一些数据,然后把控制返回给A,A处理完这些数据以后会需要更多的数据,于是又把控制传给B,这时并不是A重新调用B,而是恢复B刚才运行的断点,让B可以按照自己原先的流程继续运行。例程A和例程B的运行环境都需要保持,不存在谁必须先退出才能转移控制的问题。控制在这两个例程间跳来跳去,它们是协同的关系,例程B就成为例程A的协同例程,而不是子例程了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值