問題タブ [stm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
stm - JAVA で STM を使用して円周率計算を実装する
JAVA で pi-calculus を実装したいと考えています。同時実行のために、Deuce STM ライブラリを使用しています。JAVA 構文を変更するのは難しいので、注釈付き変数と汎用関数/クラスを使用する予定です。
たとえば。
したがって、チャネルはこのクラスのインスタンスになります。
これらのチャネルを介してプロセス間の相互作用を可能にするためにプロセスをモデル化する方法について混乱しています。
ヘルプ/提案はありますか?
ありがとうございました。
haskell - 「食事の哲学者」に対する次の解決策の何が問題になっていますか?
Haskell の STM に慣れるために、食事の哲学者の問題に対する次の解決策を書きました。
ソリューションをコンパイルして実行すると、明らかな並行性の問題はないように見えます。各哲学者は最終的に食べてしまい、どの哲学者も支持されないようです。ただし、randomDelay
ステートメントを から削除しphilosopher
、コンパイルして実行すると、プログラムの出力は次のようになります。
この場合、何が起こっていますか?
performance - clojure の「公式」並行処理の例 (locks、atoms、stm を使用) の改善の可能性
手動ロックを使用して、Clojure の同時実行性の「公式」の例をJava バージョンに近づけようとしています。この要点では、Java と clojure のコードと、すべてのバージョンの VisualVm プロファイルのスレッド ダンプを入れました。これがclojureコードとタイミングです
時間 (「古い」Intel Core デュオ):
注: 私は、Java バージョンと同じくらい速い clojure バージョンや、ロック 1 を使用する clojure と同じくらい速い stm バージョンを取得したくありません。私はそれが一般的に困難であり、いくつかの問題では不可能であることを知っています. アトムと stm の使用は、手動ロックを使用するよりも構成可能で、使いやすく、エラーが発生しにくいことを知っています。これらのバージョンは、問題に対する Java および clojure の可能な限り最良の指示対象にすぎません (私は最善を尽くしました)。私の目的は、atom と stm のバージョンをロックするバージョンに近づけるか、(おそらくこの具体的な例で) これらのバージョンを高速化できない理由を理解することです。
注: 今回は、STM と MVars を使用した Haskell バージョンとの別の比較 (リンクされた同じ要点のコード):
concurrency - 調整された書き込み/読み取りに適切なClojure参照タイプを選択する
現在のユーザーリストをアトムに保持するCampfireのチャットボットに取り組んでいます(defonce users (atom {}))
。
私はもともとその単純さのためにこの参照型を選びました、そしてそれは今までうまく機能しました、しかしそれは変更される必要があるかもしれません。
CampfireはイベントをストリーミングAPIに送信
EnterMessage
します。LeaveMessage
私のボットは、Campfire APIから現在のユーザーリストを取得し、新しいリストでアトムを呼び出すことreset!
で、これらに反応します。users
users
これらの同じEnter/Leaveイベントは、アトムからランダムなユーザーを選択して質問するなど、ランダムな相互作用をトリガーします。
問題
上記の2番目の例では、users
アトムがまだ存在していないために、離れたばかりのユーザーに尋ねるか、入ったばかりのユーザーに尋ねることはありません!reset
。を使用する必要があると思いますref
が、これらのドキュメントには、「ライターは通勤者やリーダーをブロックすることはありません」と書かれています。
haskell - Functional Banana Traveler - 入力処理
これは、私のTravelerプロジェクトのサブ問題です。
入力を処理する初歩的なコードをまとめました。TChan
ミックスにa を導入するまでは機能します。以下は、実際のコードとその使用方法の例です。次に、それを変更し、なぜそうしているのかを説明します。それから、問題について話します。
以下を実行するghci
と、これが機能することが実証されます。
これで、基本的なメカニズムが整ったので、構築を開始したいと思います。これはマルチプレイヤーゲームになります。入力処理に関する限り、これに対処するための最初のステップは、 から入力を取得することTChan
です。アイデアは、すべてのプレイヤーがこれTChan
に書き込み、各コマンドが到着した順序で処理されるということです。
そこで、新しい関数「inputFrame」を追加しました
これが私がそれを使用しようとする方法ですghci
。
output.txt
には書き込まれません。commandChan
読み込まれた後、空になるかどうかを確認します。私が間違っていることは明らかですか?そうでない場合、問題のトラブルシューティングを行うにはどうすればよいですか? また、私の意図した目的のためにTChan
、正しい選択はありますか?
haskell - haskellとラージバイナリ
TChanを介してBinaryStringをブロードキャストする場合、Binary全体または参照のみがコピーされるのは何ですか?
バイナリ全体がコピーされた場合、参照のみを送信する方法は?
multithreading - TChannel で選択的に送信しますか?
私の知る限り、TChan はハブとして機能し、送信されたすべてのメッセージは他のユーザーに表示されますよね?!
特定のスレッドにメッセージを送信するためのスイッチとして機能し、ブロードキャストもサポートする TChannel が必要です。
そんなことありますか?
java - Java STM: マルチバース STM に関する質問
私は、JVM 上の STM テクノロジについていくつかの調査を行っています。いくつかのドキュメントを読んで、Multiverse の実装について少し混乱しています。
Multiverse FAQによると、 Multiverse はインストルメンテーションをサポートしていません。しかし、創設者のピーター・ベンジャーとのインタビューで、彼は次のように述べています。
Multiverse のミッション ステートメントの 1 つは、他の言語と簡単に統合できる STM 実装を提供することです。そのため、実際の STM 実装はインターフェイスのみを考慮し、インストルメンテーションを完全にバイパスできます。さらに簡単にするために、インストルメンテーションに依存しないマネージ参照を用意しました。これは、Jonas Boner の Scala ベースの Akka プロジェクトで使用されているアプローチです。
これは正確にはどういう意味ですか?バイトコード計測器を使用していますか?
最後に、 ScalaSTMに関する別のドキュメントを読んでいますが、これは、マルチバースがバイト コード インストルメンテーションを使用していることを明確に示しています。
したがって、マルチバースが実際にどのように機能するかについて、誰かが少し教えてもらえないかと思っています。ScalaSTM に似たランタイム ライブラリですか、それともインストルメンテーションを使用しますか?
haskell - Haskell STM シャード TVAR
Haskell と STM は初めてで、基本概念を理解しようとしています。
Haskell と関数型プログラミング全般では、間違っていたら訂正してください。割り当てのようなものはありません。
私ができることは、 andx=3;
を使用して別のバインディングを生成することだけです。x
3
TVar とスレッドに関して言えば、同じ TVar を共有する多数のスレッドがある場合、1 つのスレッドが で値を変更するとwriteTVar
、他のスレッドは変更された値を認識します。
同じ var を共有する 2 つのスレッドがTVar Int
あり、最初のスレッドがそれに 1 を追加すると、成功した場合、2 番目のスレッドは更新された値を参照しますか?
タクス
c - C 用の Clojure のような STM ライブラリはありますか
ref
s、atom
s、およびagent
s を C コードにもたらすライブラリはありますか?
C に付随する構造共有ライブラリもありますか?