問題タブ [concurrent-programming]
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.
java - マルチスレッドの側面で Java と Scala を比較する
scala は MultiThread 用に設計されているが、実際には汎用目的であると言っているのを聞いたり見たりしています。
そして、「問題は、Java でクラスをスレッドセーフにすることはできますが (自分が何をしているのかわかっていれば)、Scala ではそれを簡単かつ自然に行うことができるということです。」
そして実際、AKKA と Lift は scala で記述されています (実際には Java と scala)。
しかし、java は、java.util.concurrent の新しいパッケージによって、この面でも改善されました。では、AKKA と Lift はなぜ JAVA で生まれなかったのでしょうか。
たぶん、scala は Java を C のように見せると言うでしょう :-)
誰でもこれについてより深い洞察やより深い考えを伝えることができますか?
JAVAとscalaを混在させることができるという事実を知っています。Scala は Java コードをシームレスに呼び出すことができます。だから、Javaが持っているものは、scalaもそうです。
しかし、さまざまな文法に関係なく、Java がまだ行っていないことを実際に改善する scala は何ですか?
Actors/Agents などの一部のデザインだけですか? (アクター/エージェントはマルチスレッドのすべての問題を解決できないことに注意してください。)
それとも、scala コンパイラーと関数型言語文法の採用は、本当に重要であり、Java よりも役立つのでしょうか?
scala が XText を採用できるようになるというニュースを耳にしました。XText を活用してスレッド ロジックを記述できるようにするには、これが正しいかどうかはわかりません。
Scala は複数の言語が混在しているように見えますが、このアプローチを使用すると、この側面の問題をより拡張して解決できますか?
アップデート
さまざまな角度から素晴らしい回答をありがとうございます。それらはすべて非常に優れていると思います。どちら側に立っていても構いません。
編集
以下のトピック (SO で 1 年前) は、同様のことについて尋ねていました。「建設的な」結論は非常に似ています。でも、今回は新しいポイントが出てきているのかもしれません。参考までに。
関連している:
実際、私は誰かがこの質問にまったく新しい角度で答えて、私の心を啓発し、これまで知らなかったアイデアを提供できることに非常に興味があります.
しかし、建設的ではないため閉鎖されています。:-)
java - マルチスレッドはどの程度有用ですか?
- 複数の独立したサブタスクに分割できるタスクがあり、各サブタスクは Java の個別のスレッドで実行できます。
- スレッド数を増やしてもパフォーマンスが向上しない最適なスレッド数を理解したいと思います。
mysql - SQL行間の制約を保証する方法は?
オンラインスケジュールアプリを開発中です。1 つのスケジュールを複数のユーザーが同時に編集できます。非常に重要なビジネス上の制約が 1 つあります。1 日に 3 つのイベントのみが発生する必要があります。
技術的に言えば単純化すると、データベースには次の列を持つテーブルがあります。ID | イベント | 日付 |。アプリケーションはトランザクション「select... count... where...」で実行され、結果が 3 未満の場合、新しいイベントが挿入されます。
2 つのスレッドが 1 日に 4 つのイベントを作成しないことを保証するには、どのアプローチを使用できますか? これは、古典的なチェック アンド ライトの問題です。そして、データベースレベルでどのように解決できるのだろうか?
トランザクションを使用しても、2 番目のトランザクションで別のスレッドが同じことをしないとは限りません。イベントの数が 3 未満であることを確認し、挿入を行います。テーブル全体をロックすることは、応答時間や同時実行性などが低下するため、受け入れられません。
アプリケーションは、Spring、Hibernate、MySQL を使用して Java で開発されています。
アドバイスをよろしくお願いします。
java - 満足した状態でスレッドプールを停止する
私はExecutorServiceを使用して、何千もの小さな独立したタスクを処理しています。各タスクは、完了すると、結果を保存します(これは、trueまたはfalseのいずれかです)。
したがって、すべてのタスクを処理する代わりに、タスクが答えを見つけた場合は、スレッドプールを途中でシャットダウンしたいと思います。ここで非常に明白な何かが欠けているように感じます...
parallel-processing - 並行プログラム、並列プログラム、および分散プログラムの違い
私はプログラミング構造の研究を行っていました。特にコンカレントプログラムについて勉強していました。並行プログラム、並列プログラム、および分散プログラムの区別が混乱しているように見える記事をいくつか見つけました。
私の理解は次のとおりです。
並行プログラム : 同時に複数のタスクを実行するか、そうするという概念を与える
並列プログラム : このような問題を解決するためのアルゴリズムにより、いくつかの関連タスクを同時に実行できます
分散プログラム: 対応するアルゴリズムに固有の並列処理よりも、利用可能なリソースと関係があります。問題を解決するために、複数のコンピューティング リソースを利用できます。
これらの用語の正確で詳細な説明を教えてください。
c# - コレクションのロックフリー コレクションを作成する方法
コレクションのコレクションを作成する必要があります。コレクションは複数のスレッドによって呼び出され、アイテムとルックアップ アイテムを追加します。追加されたアイテムは削除されません。現在、要素を追加している間、コレクション全体をロックする必要があります。ロックフリーにする方法はありますか?または、使用できるより良いデータ構造またはパターンはありますか? これが私のコードの簡略版です:
go - Go での並行ルーチン
互いに整数を送信する 3 つの並行ルーチンを作成したいと考えています。これで、互いに整数を送信する 2 つの並行ルーチンを実装しました。
ただし、上記のルーチンとの間で整数を送受信する別のルーチンを追加したい場合、「スロー: すべてのゴルーチンがスリープ状態です - デッドロック!」のようなエラーが発生します。以下は私のコードです:
誰でも私を助けることができますか、私の間違いはどこですか? 双方向チャネルを作成することは可能ですか、それとも int、string などの共通チャネルを作成することは可能ですか?
go - GoogleのGo言語での並行ルーチン
goで可能ですか:互いに整数を送信できる3つの並行ルーチンがあるとします。ここで、並行ルーチン2と3の両方が同時ルーチン1に整数を送信するとします。ルーチン1が2つの値の両方を取り、それをさらに処理することは可能ですか?明確にするために、私は次のコードを持っています:
ここで、この例では、ルーチン1はintをルーチン2または3に送信できます。これはルーチン3だと思います。ここで、ルーチン3もintをルーチン2に送信するとします。ルーチン2がこれら2つの値を取り、処理することは可能ですか。さらに(動的並行ルーチン)?どんな体もそれに応じてこのプログラムを変更するのを助けることができますか?
concurrency - CAS 命令が成功したかどうかを知るにはどうすればよいですか?
通常のコンペア アンド スワップ命令は、成功したかどうかを報告しません。代わりに、関係なく古い値を返すだけです。CAS が値を正常に更新したかどうかをすばやく判断するにはどうすればよいですか?