並行性とマルチスレッドアプリケーションについて学ぶための最良のリソースは何ですか?[閉まっている]


16

マルチスレッドアプリケーションと同時プログラミングに関しては、知識のギャップが大きいことに気付きました。私は過去にいくつかの基本をカバーしましたが、そのほとんどは私の心から消えてしまったようです。そして、それは間違いなく私がもっと知りたいと思っている分野です。

並行アプリケーションの構築について学ぶための最良のリソースは何ですか?私は非常に実用的な志向の人間なので、もし本に具体的な例が含まれている方が良いのですが、私は提案を受け入れます。私は個人的には擬似コードまたはC ++で作業することを好み、ゲーム開発への傾斜が最適ですが、必須ではありません。


「擬似コードで作業する」のが好きですか?それがあなたの役に立つことを願っています!:)
logc

回答:


6

これらは私が最近役に立つとわかった本です:

Javaの並行性の実践 -Javaの並行性ユーティリティの多くの作者による。多少Java固有ですが、スレッドの危険性と落とし穴について非常に明確で有益です。

Art of Concurrency-タイトルが示唆するようなシンチレーションの理論的論文ではなく、実際には有用なアドバイスと例のかなり民俗的で現実的な大要。

JVMでのプログラミングの同時実行性 -これ、実際にきらびやかな理論的論文ですが、非常に読みやすく洞察力に富んでいます。STMまたはアクターが何であるか、それらの長所と短所、およびその理由を知る必要がある場合は、この本で説明します。

Intel Threading Building BlocksやAppleのGrand Central Stationなど、多くの専用ユーティリティライブラリがあります。これらには通常、独自の専用マニュアルがあり、通常は非常に優れています。


4

私は、Joe Albahariが提唱したこの無料のスレッド化リソースが優れていることを発見しました...

C#のスレッド化

C#に傾いていますが、概念は他の言語にも完全に適用できます。彼は、チュートリアルを英語および他のいくつかの言語のPDFダウンロードとして提供しています。サンプルコード、コードのステップバイステップの説明、およびサンプルに付属する優れたシーケンス図と状態図の組み合わせにより、これをお勧めします。

チュートリアルは5つのパートに分かれています。

こちらから書籍形式で入手可能:C#4.0 in a Nutshell(23章と24章)


1
+1は、これは私のいつもの「go-に」スレッド/並行処理/並列処理のための参照.NETで
マシュー・キング


1

現在、C ++標準にはスレッド化機能があります。したがって、C ++で学習したい場合は、一般的なスレッドチュートリアルに進む前に、新しい言語機能の簡単なレビューを読むことをお勧めします。その後、戻って後で標準を詳細に確認します。

実際には、スレッドは、ほとんどの人が理解していると思うが、理解していないものの1つです。IBMの研究データベース(Java)、Linuxファイルシステム(C)、および他の非常に有名なプロジェクトで競合状態を特定した静的分析研究者の講演に行きました。プロジェクトのいくつかは、並行性とスレッド化の尊敬される専門家によって書かれました。スレッドセーフなコードを作成することは難しく、知識のギャップはそれを自分で認識する人だけに限らないことに注意してください。

ゲームプログラミングで直接役立つわけではありませんが、MPIチュートリアルをご覧になることをお勧めします(申し訳ありませんが、特定の推奨事項はありません)。スレッドで正しい並行コードを書くのは難しいように見えますが、メッセージの受け渡しでそれを行うのはかなり簡単なようです。間接的に、異なる並行性モデルを調査することが、コードをスレッドセーフにするための独自の思考プロセスに役立つことを期待しています。


1

並行処理について学習するには、並行処理用に設計された言語を使用します。Golangは並行性の組み込みサポートとほとんどのプログラマーが言語を簡単に習得できるCのような構文を持っているため、良い選択です。

メッセージパッシング、ミューテックスなどがあり、ほぼすべての同時実行性のニーズをカバーし、他の言語ではより複雑な同等物を持っています。

たとえばa、CのMPIを使用して、別のスレッドから変数にintを受信します。

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

goで別の(ユーザー)スレッドから変数aにintを受け取る:

a := <-c

goの実践を学ぶには、ブラウザーでgoコードを作成、コンパイル、実行できるgoツアーをご覧ください。

tour.golang.org

同時実行部分にスキップするには

http://tour.golang.org/concurrency/1

私の前教授は、CSの1年生のために、並行性に関する非常に人気のある短期コースを開催しました。同時性とは何かを簡単かつ徹底的に紹介するために、これを読むことをお勧めします。

並行プログラミングの基礎

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.