検索

ホームページ  >  に質問  >  本文

java - 协程就是goto吗?

协程就是goto吗?两者有何异同?

高洛峰高洛峰2884日前1212

全員に返信(4)返信します

  • PHPz

    PHPz2017-04-17 15:28:00

    同じ関数内での

    goto ジャンプは、異なる関数間をジャンプする setjump および longjump と同様である必要があります。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:28:00

    これは正確ではありません。コルーチン の主要な関数の 1 つは、必要に応じて関数間 goto を返すことができます。これは関数呼び出しに似ています。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:28:00

    コルーチンは、サブルーチンの概念を標準化するコンピューター プログラミングのコンポーネントです。コルーチンは、協調マルチタスク、例外処理、イベント ループ、反復デバイス、無限リンク リストやパイプなど、いくつかの便利なプログラム コンポーネントを実装するのに非常に適しています。

    以下は一般的なサブルーチンとコルーチンを比較しています:

    サブルーチンの開始は唯一のエントリ ポイントです。終了すると、サブルーチンのインスタンスは 1 回だけ戻ります。

    サブルーチンは常に先頭から開始されます。通常、並列プログラムは最後に終了した次の位置から開始されます。

    コルーチンは、yield を通じて他のコルーチンを呼び出すことができます。 yield によって実行権を譲渡するコルーチン間の関係は、呼び出し元と呼び出し先の関係ではなく、互いに対称的で対等です。

    サブルーチンは他のサブルーチンを下位として呼び出すため、スタック上での実装が簡単です。代わりに、コルーチンは他のコルーチンを同様に呼び出します。制御の流れを追跡するために、継続 (ガベージ コレクション ヒープによって実装される) を使用して実装するのが最適です。

    Marlin はコルーチンの特徴を次のように説明しています。

    コルーチン内のローカル変数は、後続の呼び出しでも有効なままです。

    コルーチンは制御が離れると一時停止され、制御が戻ったときに一時停止された場所から実行が続行されます。

    コルーチンの分類

    1) 制御伝達機構による分類: 対称コルーチンと非対称コルーチン

    非対称コルーチン (非対称) は、半対称コルーチン (半対称) または半コルーチン (半コルーチン) とも呼ばれ、呼び出し元の従属プロセスと見なすことができます。呼び出し元と呼び出されるルーチンの関係

    対称コルーチンは、指定されたコルーチンに実行プロセスを渡すという制御転送メカニズムのみを提供します。対称コルーチンは相互に実行プロセスを転送できるため、それらの間の関係は同じレベルであるかのようになります。

    2) コルーチンはファーストクラスの型ですか?

    3) 完全なスタックはありますか?

    完全なスタックを備えたコルーチンでは、コルーチンは最も内側の関数で中断できます。このコルーチンは、中断された場所から実行を継続します。

    Python のジェネレーターなど、完全なスタックを持たないコルーチンは、ジェネレーターの本体内でのみ一時停止できます。

    完全なスタックを備えたコルーチンを使用してユーザーレベルのマルチタスクを実装できますが、完全なスタックを持たないコルーチンは実装できません。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:28:00

    コルーチンのキーワードは、yield です。個人的には、次のような意味になると思います。
    実行を中断し、データを返してブレークポイントに戻り、実行を再開します。 yield は return および goto ブレークポイントと同等です。

    返事
    0
  • キャンセル返事