子程序被定义为一组语句,可以在方便时在程序的多个位置重复使用。这种重用导致多种类型的节省,从内存空间到编码时间。这种重用也是一种抽象,因为子程序的分析通过调用子程序的语句在程序中恢复计算。
子程序的特点如下 -
子程序只有一个入口点。
调用方在被调用子程序的执行过程中被挂起。
当被调用的子程序的执行消除时,控制权会不断地返回给调用者。
子程序有以下优点:
子程序促进可重用性。它可以在程序的多个位置重用一组语句。
子程序提供可扩展性,即,它们让您可以定制语言以满足您的要求。例如,如果您需要一个生成新部门的过程,您可以简单地编写一个。
子程序提高了可维护性,即,如果其定义发生变化,则只影响子程序。这有利于维护和改进。
子程序有助于抽象,即,要使用子程序,您应该了解它们的作用,而不是它们如何工作。因此,您可以自上而下地创建应用程序,而无需关心执行细节。
协程是具有各种条目的特殊子程序。它们可用于提供子程序的交错执行。一般来说,协程是一个特殊的子程序,它在执行完成之前返回到它的调用程序。
continue 部分执行,然后暂停执行,控制返回给调用者,稍后从暂停点恢复执行。第一个包含协程工具的高级语言 SIMULA 67。其他支持协程的语言是 BLISS、INTER LISP 和 MODULA-2
让我们看看子程序和协程的区别
子程序 | 协程 |
---|---|
A subprogram executes completely when called. | 协程在调用时部分执行。 |
Each time a subprogram is called, it begins execution from the beginning of the subprogram. | 协程从先前暂停执行的点恢复执行。 |
There is a master-slave relationship between a caller and callee subprogram. | 调用者和被调用者协程都被平等对待,不存在主从关系。 |
A subprogram has a single entry point. | 一个协程可以有多个入口点。 |
A subprogram is not history sensitive. | 协程必须对历史敏感。 |
The invocation of a subprogram is called a subprogram call. | 协程的调用称为协程恢复。 |
It provides complete execution. | 它提供交错执行。 |