問題タブ [concurrency]
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.
multithreading - スレッド化プログラミングを学ぶための良いリソースは何ですか?
デスクトップでのマルチコア CPU の台頭により、マルチスレッド スキルはプログラマーにとって貴重な資産になります。スレッド化プログラミングについて学びたいと考えているプログラマーのために、いくつかの優れたリソース (書籍、チュートリアル、Web サイトなど) をお勧めできますか?
concurrency - ドキュメントサーバー:同時保存の処理
ドキュメントサーバーを実装しています。現在、2人のユーザーが同じドキュメントを開き、それを変更して変更を保存すると、ドキュメントの状態は未定義になります(最初のユーザーの変更が永続的に保存されるか、2番目のユーザーの変更が永続的に保存されます)。これは完全に不十分です。この問題を解決するために、2つの可能性を検討しました。
1つは、誰かが最初に開いたときにドキュメントをロックし、閉じたときにロックを解除することです。ただし、サーバーへのネットワーク接続が突然中断された場合、ドキュメントは永久にロックされた状態のままになります。明らかな解決策は、サーバーに定期的なpingを送信することです。サーバーが特定のクライアントからKpingを連続して受信しない場合(K> 1)、このクライアントによってロックされているドキュメントのロックが解除されます。そのクライアントが再び表示された場合、誰かがまだドキュメントをロックしていない場合は、ドキュメントが再びロックされます。これは、クライアントアプリケーション(Webブラウザで実行中)が予期せず終了し、サーバーに「終了、ドキュメントのロックを解除」信号を送信できなくなった場合にも役立ちます。
2つ目は、異なるユーザーによって保存された同じドキュメントの複数のバージョンを保存することです。ドキュメントへの変更が連続して行われる場合、システムはバージョンをマージするか、優先バージョンを選択することを提案します。ストレージスペースを最適化するには、ドキュメントの差分のみを保持する必要があります(ソース管理ソフトウェアと同様)。
サーバーへの接続が遅く、応答しない場合があることを考慮して、どの方法を選択する必要がありますか?パラメータ(ping間隔、高速連続間隔)はどのように決定する必要がありますか?
PS残念ながら、ドキュメントをデータベースに保存できません。
multithreading - マルチスレッド プログラムの分析
私たちのコードベースは数年前のもので、元の開発者は全員いなくなっています。非常に多くのスレッドを使用しますが、明らかな設計や共通のアーキテクチャ原則はありません。すべての開発者は独自のマルチスレッド プログラミング スタイルを持っていたため、キューを使用して相互に通信するスレッド、ミューテックスを使用してデータをロックするスレッド、セマフォを使用してロックするスレッド、プロセス内通信にオペレーティング システムの IPC メカニズムを使用するスレッドなどがあります。設計ドキュメントはなく、コメントはまばらです。コードをリファクタリングしたり、新しい機能を追加しようとすると、デッドロックやその他の問題が発生するようです。
では、スレッド間のすべての相互作用を分析して文書化するのに役立つツールや手法を知っている人はいますか? FWIW、コードベースは Linux の C++ ですが、他の環境用のツールについて知りたいです。
アップデート
これまでに寄せられた回答には感謝していますが、本質的に「ログ メッセージを追加し、何が起こっているかを把握し、修正する」というアドバイスよりも、より洗練された、または体系的なものを期待していました。シングルスレッド プログラムの制御フローを分析および文書化するためのツールは数多くあります。マルチスレッドプログラムで利用できるものはありませんか?
マルチスレッド アプリケーションのデバッグも参照してください。
java - Project Darkstarは現実的ですか?
Project Darkstarは、昨夜ニューヨークのGoogleオフィスで開催された毎月のJavaSIGミーティングのトピックでした。知らない人(おそらく全員)にとって、Project Darkstarは、すべての「難しいこと」を処理しようとする大規模なマルチプレイヤーオンラインゲームのフレームワークです。基本的な考え方は、すべての操作が小さなタスクに分割されるようにゲームサーバーロジックを作成することです。これらのタスクをProjectDarkstarフレームワークに渡します。このフレームワークは、クラスター内の特定のノードへのタスクの分散、同時実行の問題、そして最終的にデータの永続化を処理します。
どうやら、この種のことを行うことは、ビデオゲームにとってはエンタープライズアプリケーションの場合とは大きく異なる問題です。講演を行ったJimWaldoは、MMOゲームのDB読み取り/書き込み比率は50/50であるのに対し、エンタープライズアプリは90%が読み取り、10%が書き込みに近いと主張しています。彼はまた、ほとんどの既存のMMOはすべてを排他的にメモリに保持し、その6時間ごとにのみDBにダンプすると主張しています。これは、サーバーがダウンした場合、最後のDBダンプ以降のすべての作業が失われることを意味します。
さて、プロジェクト自体は本当にクールに聞こえますが、業界がそれを受け入れるとは思いません。まず、Javaでサーバーコードを作成する必要があります。クライアントコードは何でも書くことができますが(JimはActionScript 3が最も人気があり、C ++がそれに続くと主張しています)、サーバーのものはJavaでなければなりません。私には良さそうに聞こえますが、ゲーム業界の誰もがJavaを嫌っているという印象を受けます。
第二に、開発者が既存のフレームワークとライブラリを使用することを好む他の業界とは異なり、ゲーム業界の人々はすべてを自分で書くことを好むようです。それだけでなく、彼らは彼らが作り出すすべての新しいゲームのためにすべてを書き直すのが好きです。開発者が物理学にHavokを使用しているところ、プラットフォームとしてUnreal Engine 3を使用しているところなど、状況は変わり始めていますが、ほとんどの場合、すべてがまだ独占的であるように見えます。
それで、Project Darkstarの人たちはただ時間を無駄にしているのでしょうか?このような一般的なフレームワークは、必要なパフォーマンスを備えた複雑なゲームで実際に機能しますか?たとえそれが機能したとしても、ゲーム会社はそれを喜んで使用しますか?
multithreading - 他の言語のErlangスタイルの並行性
アーランスタイルの並行性モデル(プロセス、メールボックス、パターンマッチング受信など)を提供するために、他のプログラミング言語用にどのライブラリが存在しますか?
注:スレッドライブラリやキューイングライブラリだけでなく、Erlangに類似することを目的としたものに特に興味があります。
java - 並行プログラムで BlockingQueue からオブジェクトを取得する最良の方法は?
並行プログラムで、競合状態に陥ることなく BlockingQueue からオブジェクトを取得する最良の方法は何ですか? 現在、次のことを行っていますが、それが最善の方法であるとは確信していません。
私はまだ競合状態に陥っていません...しかし、これが本当に安全かどうかはわかりません.
.net - ファイルシステムの変更を処理するための最適なアーキテクチャは?
シナリオは次のとおりです。
特定のディレクトリの変更を監視するアプリを作成しています。このディレクトリは、「ほぼ」一意の GUID を持つ毎分数千のファイルであふれます。ファイル形式は次のとおりです。
GUID.dat ここで、GUID == xxxxxxxxxxxxxxxxxxxxxxxxxxxxx (内部コンテンツは関係ありませんが、単なるテキスト データです)
私のアプリは、リアルタイムで追加および削除されるすべてのファイルを表示する 1 つのテキスト ボックスを持つフォームになります。新しいファイルが入るたびに、このファイルでテキストボックスを更新する必要がありますが、最初に、この半一意の GUID が本当に一意であることを確認する必要があります。そうであれば、この新しいファイルでテキストボックスを更新します。
ファイルがそのディレクトリから削除されたら、それが存在することを確認してから削除し、それに応じてテキストボックスを更新します。
問題は、私が .NET filewatcher を使用していて、(buffersize + 1) 番目のファイルが入るたびに爆発する内部バッファーがあるように見えることです。アプリを作成し、入ってくるすべてのファイルを追加するだけですが、後で一意の GUID チェックを行いますが、さいころはしません。
multithreading - 競合状態とは何ですか?
マルチスレッド アプリケーションを作成するときに発生する最も一般的な問題の 1 つは、競合状態です。
コミュニティへの私の質問は次のとおりです。
- レースコンディションとは?
- それらをどのように検出しますか?
- それらをどのように扱いますか?
- 最後に、それらの発生をどのように防止しますか?
multithreading - デッドロックとは?
マルチスレッド アプリケーションを作成する際に発生する最も一般的な問題の 1 つは、デッドロックです。
コミュニティへの私の質問は次のとおりです。
デッドロックとは?
それらをどのように検出しますか?
それらを処理しますか?
最後に、それらの発生をどのように防止しますか?
multithreading - セマフォとは?
セマフォは、マルチスレッドの問題を解決するために頻繁に使用されるプログラミングの概念です。コミュニティへの私の質問:
セマフォとは何ですか?また、どのように使用しますか?