Goのチャネル/ゴルーチンのように機能する obj-c 用のCSPライブラリをどのように作成するのだろうか。
ネイティブのコルーチンやジェネレーターを使用する他の言語では、簡単にモデル化できますが、obj-c で並行プログラミングを行ういくつかの方法で同じことを行う方法を理解していません (さらに、アイデアは「安価な」スレッドを持つことです) )。
私が何をする必要があるかについてのヒントはありますか?
State Threads ライブラリは、Go のゴルーチンスイッチング アルゴリズムの根底にあるほぼ同じアイデアを実装しているため、調べてみます。記述子は、読み取り (および/または書き込み) が可能な独自の FD のようなオブジェクトを提供しますが、プロセス全体をブロックする代わりに、これらの操作は、ライブラリによって管理される他の軽量スレッドに制御を転送します。
次に、OS スレッドが SP を実行中の状態に保つために、ST ライブラリよりも高度なスケジューラが必要になる場合があります。Go 1.2 スケジューラーの簡単な紹介はこちらで、よりハードコアな設計ドキュメントへのリンクが含まれています。残りは Go のソース コードにあります。
SO のこの回答も参照してください。
操作を作成します。たとえば、次のプロセスを考えてみましょう。
x
は から数値を取得しeast
、それを文字列に変換して、 に渡しますwest
。x
内部状態(数値と文字列で構成される)を保持するオブジェクトと次の操作でモデル化できること:
east-output
east
、プロセス ロジックによって別の場所で定義された操作x-input
に依存する操作east-output
。east-output
のデータ構造からの数値をのデータ構造にコピーしx
ますx-output
に依存する操作x-input
。その内容は、純粋に内部変換として定義されます。この例では、stringWithFormat...
west-input
x-output
、などに依存する操作次に、操作をダンプして、NSOperationQueue
何が起こるかを確認します (機能するか、矛盾する依存関係があるか...)。