協同例程

協同例程

協同例程是為開發偽並行的單處理機系統模型而發明的,使人們能夠使用高級語言編寫偽並行作業系統。有了協同例程之後,就沒有互斥和同步問題。基本的問題是調度和控制轉移。

協同例程是一個能夠按照偽並行方式獨立地執行的程式單位。協同例程像一個由主程式激活的過程,但和過程不同,協同例程能夠在任何一處,控制轉移到另一個協同例程,而且當控制轉移返回到原協同例程時,在其執行被掛起的地方恢復先前的執行。

基本介紹

  • 中文名:協同例程
  • 外文名:co-routines
  • 定義:偽並行方式獨立地執行
  • 基本問題:調度和控制轉移
  • 系統:計算機
  • 學科:計算機技術
概述,Modula—2的協同例程,

概述

協同例程是為開發偽並行的單處理機系統模型而發明的,使人們能夠使用高級語言編寫偽並行作業系統。有了協同例程之後,就沒有互斥和同步問題。基本的問題是調度和控制轉移。
協同例程是一個能夠按照偽並行方式獨立地執行的程式單位。協同例程像一個由主程式激活的過程,但和過程不同,協同例程能夠在任何一處,控制轉移到另一個協同例程,而且當控制轉移返回到原協同例程時,在其執行被掛起的地方恢復先前的執行。
協同例程都是平等的,它們當中不區分父協同例程或者子協同例程。協同例程是串列地執行的,因為在任何時刻,只能夠有一個協同例程在活躍,而且只有在它把控制轉移給另一個協同例程時,才停止活躍。
這說明了每個協同例程必須有其自己的局部運行環境,同時在協同例程不活躍時,仍然留在記憶體儲。運行環境一般必須包括在該協同例程內所作的全部活躍調用,加上一個指明該協同例程中要恢復執行的位置指針,以及一個指向協同例程創建者環境的指針

Modula—2的協同例程

在Modula—2中,協同例程被稱為進程,即使它們不是真正並行執行。Modula—2的進程是標準庫SYSTEM的一部分。這些設施包括:過程NEWPROCESS用來創建一個新的協同例程,而且分配用來保留其局部環境的記憶體儲。過程TRANSFER用來從一個進程控制轉向另一個進程。
在Modula—2中,NEWPROCESS創建一個協同例程,但不開始其執行。NEWPROCESS指派一個過程和這個環境的工作空間給一個進程變數。它被說明為:
PROCEDURE NEWPROCESS(P:PROC;A:ADDRESS;
n:CARDINAL; VAR p1:PROCESS);
其中P是任一個無參數過程(TYPE PROC=PROCEDURE),A是工作空間的起始地址,n是這個工作空間的長度,p1是要創建的進程變數。
如何分配工作空間是同套用和具體的實現有關。典型的方法是對每個協同例程分配全局的ARRAY{1..m}OF WORD變數,而且使用函式ADR和SIZE傳遞開始地址以及長度給NEW—PROCESS。數組空間的大小,是同實現和涉及的協同例程有關的。

相關詞條

熱門詞條

聯絡我們