並行性とマルチスレッドをどのように実践しますか?[閉まっている]


33

私は並行性、マルチスレッド、および「無料のランチが終わった」について読んでいます。しかし、私はまだ仕事でMTを使用する可能性がありませんでした。

したがって、私は、いくつかのオープンソースプロジェクトへの演習または参加を通じて、CPUヘビーMTの練習をするためにできることについての提案を探しています。

ありがとう。

編集:私は、スレッド、ミューテックス、ロックなどのツールのみを説明する本や論文ではなく、MTをCPUバウンドタスクに使用するオープンソースプロジェクト、または単にMTを使用して実装するのに興味深いアルゴリズムに興味があります。 MTを使用してレスポンシブGUIを作成する方法...



5
Q:並行性とマルチスレッドをどのように実践しますか?A:ジャグリングによって
スティーブンA.ロウ

@スティーブン:それほど遠くない、本当に。
ロバートハーベイ

「無料のランチは終了しました」リンクは無効です
ユーザー

[OK]をする必要があり、今...
ザビエルNodet

回答:


15

C#でのスレッド化に関するJoseph Albahariの記事は、私が見た中で最高のリソースの1つです。

目次は次のとおりです。Task Parallel Libraryなどの一部のトピックは.NETに固有のものですが、その多くは他の言語、特にJavaに適用できます。

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

Jon Skeetのチュートリアルもこちらでご覧いただけます:http : //www.yoda.arachsys.com/csharp/threads/


3
私はあなたの答えにジョンスキートのc#mutlithreadingページを追加します:yoda.arachsys.com/csharp/threads

1
第二に、アルバハリの5つの章が非常に役立つことを気に入っています。練習のために、簡単な演習-WCF(ご存じの場合)とシンプルなUIを使用してマルチプレイヤー三目並べゲームを作成します-各プレイヤーからの応答でUIコントロールを更新してみてください。Firefoxのコードを確認しましたか?
ナラヤナ

それが何をするのか、そして尋ねられた質問に答えるのになぜそれをお勧めするのか、もっと説明してもらえますか?Stack Exchange では「リンクのみの回答」は歓迎されません
-gnat

1
@gnat:目次に答えを貼り付けました。
ロバートハーヴェイ

Jon Skeetのチュートリアルへのリンクが機能していないようです(Azure 404ページを取得していました)-アーカイブは次のとおりです:web.archive.org/web/20181010053742/http
ArtOfWarfare

13

Java Concurrency in Practiceは、マルチスレッドと並行性に関する最高の本の1つです。この本のすべての例はJavaベースですが、この本はMTの世界をしっかりと説明しています。MTシステムを開発していたとき、それは非常に役立ちました。


3
+1良い本。そして、それはActionではなくJavaの並行性です。
タロンクス

8

James Reinders 著のIntel Threading Building Blocksの第11章は、並列計算(または並列プログラミング)を利用するアルゴリズムとプロジェクトの例に当てられています:サブストリングファインダー、Game of Life、Sieve of Eratosthenes、Matrix Multiply、次に、ネットワークパケットフィルタリングやゲームなどのより高度なトピック。


4

Joe DuffyによるWindowsでの並行プログラミングが非常に役立つことがわかりました。多くの深さがあります。それはパンチを引っ張らないので、あなたは足で自分を撃つ方法がいくつあるかについて本当に良い感じを得る。それは用心深くするのに役立ちました。これは、MTアプリから始めた人なら誰にでも与えることができる最高のアドバイスです。


2

並行性と並列性には違いがあります。並行性とは、2つのファイルに書き込むなど、一度に複数のことを行うことです。並列処理とは、複数のコアを使用してプログラムを高速化することです。

並行処理に関しては無料の昼食はありませんが、並列処理では確実に昼食がより自由になります。http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskellのような開発を参照してください


2
あなたの区別が間違っています。並行性とは、特定の時点で複数のタスクを実行する必要はなく、重複する期間に複数のタスクを完了する行為です。並列処理とは、常に複数のことを行うことです。
アサドSaeeduddin 14年

それらが重複している場合、あなたは一度に複数のことをしている最中です。
dan_waterworth 14年

開始時刻と終了時刻が重複している場合、これは両方のタスクが同時に実行されていることを示すものではありません。合計する2つの整数のリストが与えられた場合、2人で各リストを独立して同時に合計することができます(同時並行)、または座って、一方のリストのエントリと他方のエントリの合計を切り替えることができますリスト。同時ではあるが並列ではない。
アサドSaeeduddin

それらが同時に起こっているとは言いませんでした。一度に複数のことを行うと言いました。
dan_waterworth 14年

一度に複数のことを行うことは、2つのことを同時に行うことと同じです。特定の時間に複数のことが発生している場合、それらは同時に発生しています。
アサドSaeeduddin 14年

1

このサイトには一般的なプロジェクト例がいくつかあります。www.planet-source-code.com

言語を選択して、マルチスレッドを検索するだけです。ソースコードが利用可能な多数のプロジェクトが表示されるはずです。


これがまだ投票されていないことに驚いています。これは、「並列プログラミングと並行プログラミングを実践する方法」という質問に焦点を当てた唯一の答えです。他のすべての回答は、「概念の学習方法」という質問に対応しています。これは別の質問です。
ジョサイア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.