問題タブ [gpars]
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.
groovy - IntelliJ IDEA に GPars DSL を認識させるにはどうすればよいですか?
GPars User Guideによると、IntelliJ IDEA は、GPars jar がプロジェクトに追加されるとすぐに GPars DSL を認識できるはずです。Groovy 1.8 以降、GPars は Groovy ディストリビューションに含まれるようになりましたが、そのファセットを IDEA プロジェクトに追加しても役に立たないようです。
DSL サポートを有効にする方法を知っている人はいますか? 随所に小さな下線を付けるのではなく、DSL キーワードが認識されるようになれば、本当に素晴らしいことです。
注: IntelliJ IDEA Ultimate v11.1 を使用しています
groovy - アクター本体の「loop()」メソッドの意味は何ですか - GPars
アクター本体では、react() メソッドを loop() メソッド内に記述する必要があります。このループ方法が「for」または「while」ループとどのように違うのか知りたいですか?
GPars のドキュメントには、「loop() は、ネストされた react() ブロックと連携し、後続のメッセージ取得で確実にループする」と記載されています。私はこれを正確に理解していません。私の理解によると、ループメソッドに提供するクロージャは、無限に何度も実行されます。それでは、ネストされた react() ブロックとの調整についてはどうすればよいでしょうか?
arrays - GPars 巨大なリストを処理し、その部分で修正サイズの並列化を行います
並列化されたサブタスク セットの順次実行される部分に大きなタスクを分離できるようにする GPars 機能を探しています。
つまり、配列サイズKを反復し、それぞれがthreadCountのサイズを持つ並列タスク ブロックの順次割り当てを行います 。
言い換えれば、最初に配列を反復せず、一度にすべてのタスクを送信しますが、前のブロックの準備ができたら (OOM を防ぐ)、ページネーションなどを使用して、割り当てを順次実行します。
以下のコードのようなものですが、最初にページをリストしてタスクを送信する代わりに、ページを順番に処理する必要があります。
myHugeList.getNextPage().each {
withPool(threadCount) { Closure.callAsync().get() }
}
ありがとう、イェフィム
concurrency - GPars アクター モデルはユーザー スレッドまたはネイティブ OS スレッドを使用しますか
処理するメッセージがない場合、アクターはスレッドを消費せず、メッセージが到着したときにのみスレッドにアタッチします。ただし、私の質問は、アクターがスレッドに接続されているとき、それはどのような種類のスレッドですか?ユーザースレッドまたはネイティブ OS スレッドですか?
基本的に、アクターにブロッキング コードがある場合、つまり i/o 呼び出しや Web サービスの応答を待っている場合にどうなるかを理解したいですか? スレッドはブロックされたままになりますか、それともスレッドが解放されて他のアクターが利用できるようになりますか? 私が思う限り、それがネイティブスレッドであればブロックされます。ただし、それがユーザー スレッドの場合、ネイティブ スレッドはブロックされない可能性があります
actor - GPars アクターは耐障害性がありますか
GPars のアクターには、独自のメッセージ キュー (メール ボックス) があります。アクターが 15 個の保留中のメッセージを持っていて、突然システムがダウンしたとします (たとえば、電源障害が原因です)。この 15 通のメッセージはどうなりますか。システムが再稼働したときに、メッセージ キューは自動的に復元されますか? または、キュー内のメッセージが失われますか?
groovy - 2つのタスクを同時に実行し、Groovyで結果を待つにはどうすればよいですか?
私には、並行性と並列性によってより効率的になるために熟していると私が信じる大きな処理タスクがあります。
GParsのドキュメントを見て、かなり混乱していることがわかったので、ここの人々が助けてくれることを願っています。
私が並行して実行したい最初のタスクは、現在次のようになっています。
どちらもオブジェクトのリストを返し、両方を並行して実行できます。
それらを一緒に実行し、それらが終了するのを待ってから、リターンリストを処理したいと思います(リスト間の一致を探しますが、後でそれについて説明します)。
ありがとう
Rakesh
hibernate - GORM GPARS 統合テスト
Gorm 悲観的ロックの統合テストを試みており、多数のサーバーからのアクセスを同時にマルチスレッド化してシミュレートしていますが、各スレッドで期待どおりの結果が得られません。これは私のコードです:
何が起こっているのかわかりません。Hibernate sessionFactory が各スレッドにバインドされておらず、Domain.withTransaction が動作するはずだと思っていましたが、動作しませんでした。
何か助けはありますか?
groovy - GparsのrunForkJoinメソッドとforkOffChildメソッドについて
私はこれらの方法をうまく利用しようとしていますが、誰かが私を助けてくれれば幸いです。私はgroovyを使用していて、文字列のマップが2つあります。2つのマップの文字列をスレッドで照合したい(gparsを使用)例:def firstMap = ["a": "A"、 "b": "B"] def secondMap = ["c": " C "、" a ":A"]
マップ間で等しくなる通常の方法は、
gparsスレッドでやりたいので試してみました:
私はこれに少し慣れていて、それを機能させる方法が本当にわかりません。助けていただければ幸いです。ありがとう、または。
gpars - GPars を使用してツリー内のノードを処理し、処理されたノードをキャッシュする
ツリーを処理していますが、GPAR を使用して高速化したいと考えています。単純なことには使用しましたが、より複雑なオプションについては詳しく説明していません。
ツリーのさまざまなブランチを独自のスレッドで処理しているとします。
ノードに名前があるとしましょう。そのノードに初めてヒットしたときに、それを処理し (データベースへの書き込みなどを含む)、キャッシュに追加します (ここでは単純なマップのみ)。
ツリーの他の場所で同じノード (同じ名前のノードなど) にヒットする可能性のある他のスレッドがキャッシュをチェックできるようにします。すでにキャッシュにある場合は、それを取得して先に進むことができます。別のスレッドがそのノードの処理に初めて取り組んでいる場合、ブランチ内のそのノードにある他のスレッドがツリーを下る前に待機する必要があります (そのノードが既に処理されていることに依存する他のものに)。
ノードはデータベースからプルされるため、各ブランチで同じオブジェクトではありません。同期されたメソッドは機能しないと思います。
もちろん、関係のない他のノードも処理し続けたいと思います。
例えば:
- スレッド 1 は ABCD を処理しています
- スレッド 2 は EBFG を処理しています
- スレッド 3 は WXY を処理しています
- スレッド 4 は LMNOPQRSBJ を処理しています
スレッド 1 が最初にノード B に到達するとします。キャッシュにないことがわかったので、処理を開始します。
スレッド 2 は、ノード B がキャッシュにないことを確認しますが、作業中です。そのため、スレッド 1 がノード B の処理を完了するまで、ノード F に進むのを待ちます。
スレッド 3 はノード B を気にしないため、クランキングを続けます。
スレッド 4 は、スレッド 1 がノード B の処理を終了し、キャッシュ内でノード B を見つけた後に発生するため、キャッシュからそれをプルして、ノード J に進みます。
この状況に GPAR を最適に適用する方法の提案を探しています。
ありがとう!
gpars - GPAR 非同期関数と、別のスレッドによって更新されている参照の受け渡し
ファイル内の各行が解析されるときに、GPAR 非同期関数を使用してプロセスを起動しています。
スレッド セーフに問題があるのではないかと思わせる奇妙な動作が見られます。
次のように、入力スプレッドシートの現在の行から値をロードしている現在のオブジェクトがあるとします。
現在の行のすべての値を取得したら、次のような async クロージャーを起動します。
これは同じクラスで定義されているため、currentRowObject にアクセスできます。
それがオフで実行されている間に、次の行を解析し、新しいオブジェクトの作成から始めます。
値をロードし始めます。
これは安全であり、非同期関数は前のオブジェクトを指していると思いました。ただし、クロージャーを参照にバインドさせているため、何らかの形で参照が非同期関数で更新されていて、その下からオブジェクトインスタンスを引き出しているのではないかと思います。前のインスタンスで作業します。
もしそうなら、修正のための提案はありますか?それとも私は安全ですか?
ありがとう!