0

そのような特定の質問ではありませんが、私は水域をテストしようとしています。私は分散オブジェクトが好きで、グランド セントラル ディスパッチが好きです。2つを組み合わせてみてはどうですか?

それは意味がありますか?この海域で遊んだことのある人はいますか?GCD を使用して、複数のマシン間でオブジェクト アクセスを同期することはできますか? それとも、ローカル オブジェクトのみを同期することに固執する方がよいのでしょうか? 何に気をつければいいですか?どの設計パターンが役に立ち、何を避けるべきか?

例として、GCD キューを使用して、ある種の共有リソースへのアクセスを同期します。分散オブジェクトを介してこのリソースを公開すると、何が起こると予想できますか? 次のような質問: 分散オブジェクトをブロックでうまく扱うにはどうすればよいですか? マシン間ですべてを通常どおり使用できますか? そうでない場合、そうするためにそれを論争できますか? どのような困難が予想されますか?

4

2 に答える 2

2

これがうまくいくとはとても思えません。GCD オブジェクトは Cocoa オブジェクトではないため、リモートで参照することはできません。GCD 同期プリミティブは、プロセス境界を越えて機能しません。

ブロックはオブジェクトですが、 をサポートしていないためNSCoding、プロセス境界を越えて送信することはできません。(考えてみれば、それらは関数ポインタ以上のものではありません。ポイント先の関数は実行可能ファイルにコンパイルされている必要があります。したがって、2 つの異なるプログラムがブロックを共有することは意味がありません。)

また、分散オブジェクトは、特定の実行ループでスケジュールされている接続に依存します。GCD が使用するスレッドを管理しないため、一時的な場合を除き、実行ループ ソースを追加する資格はありません。

率直に言って、それが理論的にどのように機能するのか、あなたがどのように想像しているのかさえわかりません. 何をしたいですか?どのように機能すると予想されますか?

于 2012-05-14T01:34:21.660 に答える
0

LAN、MAN、または WAN のように複数のマシンで実行されていますか?

LAN では、接続しているサーバーが動作している限り、分散オブジェクトはおそらく問題なく動作します。しかし、あなたが出会うほとんどのプログラマーはおそらく眉をひそめ、「LAN 上の Web サーバーを使用して、分散オブジェクトのように感じさせる独自のラッパー クラスを作成しなかったのはなぜですか?」と尋ねるでしょう。つまり、1 つには、Web サーバーのトラブルシューティング用の確立されたツールがあり、分散オブジェクト サーバーよりも Web サービスを構築するために誰かを雇う方が簡単で、多くの場合安価です。

ただし、MAN または WAN では、これは遅くなり、ほとんどの用途にとって非常に悪い考えです。この種の通信には、他の誰もが使用するものを使用する方がよいでしょう。つまり、HTTPS/HTTP を使用した REST のような API を使用して、XML、JSON、またはキー/値データをやり取りします。したがって、これを分散オブジェクトのように「感じさせる」クラス ラッパーを作成できます。そして、私の直感では、サーバーからフェッチし続ける必要がないようにデータのチャンクをクライアントでローカルにキャッシュしたり、サーバーでキャッシュしたりするなど、これを高速化するためのトリックを使用する必要があることを教えてくれます。データベースと頻繁にやり取りする必要がありません。

GCD、分散オブジェクト、Mach ポート、XPC、POSIX メッセージ キュー、名前付きパイプ、共有メモリ、およびその他の多くの IPC メカニズムは、実際には、同じコンピューター上のローカルのアプリケーション間通信でのみ最も意味があります。また、それを利用したい場合は、特権の昇格という追加の利点があります. (注意してください、ワークステーション固有の POSIX メッセージ キューと言いました。LAN、MAN、または WAN で「メッセージ キュー サービス」を引き続き使用できます。そのために利用できる製品は多数あります。)

于 2016-04-02T00:36:43.240 に答える