私は対称コルーチンのサポートがBoost.Coroutine2のC++で削除されていることに気付いたので、私は理解したかったのですが、2つの違いは何ですか?非対称コルーチンと対称コルーチンの違いは何ですか?
答えて
対称および非対称コルーチンの差を「Revisiting Coroutines」彼らの論文でアナルシアデモウラとロベルト・イエルサリムズチーによって特に良好に記述される:コルーチンの
よく知られている分類は、その制御トランスファオペレーションに関する対称の概念を区別するおよび非対称なコルーチンの概念を区別します。対称コルーチン機能は、コルーチンが明示的に制御を渡すことを可能にする単一の制御転送操作を提供します。非対称コルーチン機構(より一般的に半対称形またはsemiコルーチン)は、2つの制御転送オペレーションを提供します.1つはコルーチンを呼び出すためのものと、もう1つはコルーチンの呼び出し元に制御を戻すものです。対称コルーチンは同じ階層レベルで動作しますが、非対称コルーチンはその呼び出し側に従属すると見なすことができ、その関係は呼び出されたルーチンと呼び出し側ルーチンの間の関係と多少似ています。
並行プログラミングをサポートするコルーチンのメカニズムは、通常、Modula-2のように独立した実行単位を表す対称コルーチンを提供します。一方、一連の値を生成する構造を実装するためのコルーチン機構は、通常、非対称コルーチンを提供します。このタイプの構成の例は、イテレータおよびジェネレータです。
(引用省略)
非対称コルーチンモデルでは、「非対称」は、コルーチンの間にスタック状通話に関する関係があることを意味します。コルーチンは、別のコルーチンを呼び出すか、呼び出し元に制御を渡すことで自身を中断することができます。通常は同時に呼び出し元に値を返します。
対称コルーチンモデルでは、コルーチンは、他のコルーチンに対して制限なしで制御を与えることができます。
実際には2つのモデルの表現力は同じです。すなわち、対称コルーチンを用いて非対称コルーチンを実施することができ、逆もまた同様である。その結果、MouraとIerusalimschyは次のように書いています。「両方の構造を提供することは、表現力の向上なしに[コルーチン(coroutine)]メカニズムの意味を複雑にするだけです。パワー。"それらは対称コルーチン機能が良好boost::context::execution_context
(Boost.Contextの一部)によって実装されていることを信じているのでCoroutine2の
開発者は、ライブラリ内の対称的なコルーチンを提供しないことに決めた。http://lists.boost.org/Archives/boost/2015/06/223701.php
コルーチンは、例えば、発呼者と被呼者との間で切り替えますcorotuine-functionを入力すると、呼び出し元のコードに戻ります。あなたのでコルーチン内
を
- から呼び出され、サスペンド機能の呼び出し元
- によって呼び出され、レジューム機能:通常(非対称)コルーチンは、この目的のための2つの機能を持っていますコンテキストを切り替える2つの機能を持って、それは非対称と呼ばれます。 対称コルーチンには、現在のコンテキストを中断して別のコンテキストを再開する関数が1つしかありません。次に対称コルーチンを再開する必要があることを指定する必要があります。
対称コルーチンは、ユーザランドスレッドを実装するために使用することができる(対称コルーチンは、ユーザランドスレッドを表し、スケジューラは、次のユーザランドスレッドがスケジュールされている、例えば次symmtricコルーチン1つからジャンプ)より効率より非対称コルーチン。 対称コルーチンは、次のユーザランドスレッドを再開するために呼び出し側に戻る必要がないため、明らかです。 非対称コルーチンは、同じ機能を実現するために、対称コルーチンよりも多くのコンテキストスイッチを必要とします()。
対称コルーチン - symmtricコンテキストスイッチは - より良い「現在の継続とコール」(スキーム、ルビー...)のような概念で表現されます。 boost.contextは、callcc()/ continuationの実装でこの概念をサポートしています。 したがって、boost.coroutine2は対称コルーチンAPIを提供しませんが、boost.coroutine2の非対称コルーチンはboost.contextのcallcc()/ continuationで実装されています。
- 1. 対称暗号鍵と非対称鍵 - ssl
- 2. 非対称キーとシンメトリックキーストレージ
- 3. 非対称暗号とJWT
- 4. パンダでの非対称エラーバー
- 5. クライアント/サーバーアーキテクチャの非対称プロトコル
- 6. 非対称Javaの圧縮
- 7. 非対称ミューテックスの概念
- 8. HTTPSは非対称または対称暗号化を使用しますか?
- 9. 非対称平面ピクセルサイズ
- 10. 非対称減衰関数
- 11. CNTK非対称パディング警告
- 12. PowerShell非対称暗号化
- 13. matplotlibのIは、非対称エラーバーとバーグラフをプロットする必要が非対称のエラーバー
- 14. OpenSSLで非対称RSA鍵の問題
- 15. R:対称アイデンティティプロット
- 16. 絶対名称
- 17. PythonのコルーチンはLuaのコルーチンとどう違うのですか?
- 18. 対称スペクトルのiFFT
- 19. matplotlibの対称ストリームプロット
- 20. プロセスリングの非対称性のリンク
- 21. Tensorflowの非対称パディング仮定
- 22. Djangoのモデル非対称関係
- 23. Django多対多関係対称型の違い
- 24. 同時対称差
- 25. ベクタライズ対称行列
- 26. 再帰ツリー対称
- 27. Tensorflow対称行列
- 28. 異なる画像サイズが非対称
- 29. Apache POI(DOCX)XWPFTable非対称セル
- 30. なぜプロセッサに非対称レジスタがないのですか?
どういうわけか、私はこの回答がコルーチンに関する多くの知識や文脈を持っていない人には良い説明だと感じています。 – stucash