デスクトップでのマルチコア CPU の台頭により、マルチスレッド スキルはプログラマーにとって貴重な資産になります。スレッド化プログラミングについて学びたいと考えているプログラマーのために、いくつかの優れたリソース (書籍、チュートリアル、Web サイトなど) をお勧めできますか?
17 に答える
Herb Sutter の「The Free lunch Is Over 」と、 Effective Concurrencyに関する一連の記事を参照してください。
Joseph Albahari は、C# でのスレッド化の概要を次のように書いています。
正直なところ、自分で読んだことはありませんが、Concurrent Programming in Javaは何人かの人から勧められたと聞いた本です。
ブログにC++でのマルチスレッドと並行性について書いています。また、C ++での並行性に関する本を書いています:C ++ ConcurrencyinAction。
これはDelphi固有ですが、この概念が他の言語に適用されない理由はありません。
Brian Goetz によるJava Concurrency in Practiceを (ほとんど) 読みましたが、これは非常に優れています。
この本には Java ベースのテーマ (スレッド、ロックなどの Java 固有の実装を使用) が含まれていることは明らかですが、ほとんどすべての原則は他の言語にも適用できます。
著者のホームページには、彼が書いた記事のリストが含まれており、その中にはスレッド関連のものも含まれています。そこから始めて、彼のスタイルが気に入ったら、本を購入してください。
C# (または .NET 全般) での同時実行プログラミングに関する優れたガイドとリファレンスについては、MSDN のVance Morrison によるMSDN What Every Dev Must Know About Multithreaded Apps記事をお勧めします。マルチスレッド開発に関する多くのベスト プラクティス情報と注意事項が含まれています。
私は同時実行記事、ブログ、およびプロジェクトのリンクブログを次の場所で維持しています。
私は通常、さまざまな環境 (Erlang、Java、Scala、.NET、C++、Ruby、Python など) でのさまざまなトピック (スレッド、アクター、ロック、並列プログラミング) について、1 日に 1 つか 2 つのリンクを投稿します。
CPUメーカーのWebサイトには、いくつかの興味深いコンテンツがあります。
http://developer.amd.com/documentation/articles/Pages/default.aspx#parallel
http://software.intel.com/en-us/multi-core
また、Intelのオープンソーススレッドライブラリには、いくつかの優れたリファレンスがあります。
あなたが何を探しているのか正確にはわかりませんが、WindowsForms 開発を行っている場合は、次のブログ投稿を毎分読む価値があります: WinForms UI Thread Invokes: An In-Depth Review of Invoke/BeginInvoke/InvokeRequred
単純なタスクの高度に並列化されたバージョンを試してみたい場合、または実際のソリューションを見たい場合は、ワイド ファインダープロジェクトを見るよりも悪い結果になる可能性があります。基本的には、ログ ファイルの並列正規表現マッチングを効率的に行う方法に関するものですが、できるだけ少ないコードを追加しようとしています。
参加者はさまざまな言語でソリューションを提出し、パフォーマンス結果が掲載されています。当初のプロジェクトは終了し、現在はワイド ファインダー 2がその作業を担当しています。
CodingHorrorには、ワイド ファインダーの優れた入門書があります。
http://www.cilk.com/multicore-e-book/
チュートリアルや書籍を探している場合は、出発点として言語を指定して、いくつかのコードをいじることができるようにするのが最善かもしれません。
コンピューター サイエンスと実践のバランスを取りながら、このテーマを充実して徹底的に扱うには、The Art of Multiprocessor Programmingをお勧めします。多くの例はオブジェクト指向のコード、つまり Java にあり、他の言語もあちこちに散らばっています。それは、取り上げるトピックによって異なります。この本で私が本当に気に入っているのは、一般的なアルゴリズムを並行設計で実装する方法について説明していることです。もちろん、他にもたくさんあります!
一般的な概念と pthread の扱いについては、 Programming with POSIX Threadsがとても気に入っています。ライブラリと API であるため、C で記述されています。
Windows および C# の開発者は、Joe Duffy のブログを参照してください。Joe は、Microsoft の開発部門で並列ライブラリ、インフラストラクチャ、およびプログラミング モデルに取り組んでいます。彼は、2008 年 11 月に出版予定の「Concurrent Programming on Windows ( Amazon リンク)」というタイトルの本を持っています。
また、ゴッドファーザーのブログ: Herb Sutter's Sutter's Millもお見逃しなく。Dr. Dobb's Journal などのすべての記事へのリンクがあります。彼のConcurrency カテゴリをクリックします。
Erlang プログラミング言語は、使いやすいスタイルの並行プログラミングを提供します。実際に Erlang を使用することはないかもしれませんが、概念は他の言語に移植できます。Programming Erlang: Software for a Concurrent Worldという本を読みたいと思うかもしれません。
関数型プログラミングのファンは、新しいことを学ぶ必要はないと主張しています。純粋な関数型言語を使用するだけで、コンパイラーまたはインタープリターがすべてを自動的に並列化します。したがって、Haskell、OCaml、または別の関数型言語を学びたいと思うかもしれません。
Boost.Threads は、学ぶべき優れた C++ 同時実行ライブラリであると思います。特に、マルチスレッド アプリケーションの作成を始めたいだけの場合はなおさらです。コードは非常に簡潔で理解しやすく、さらに次の C++ 標準には、Boost.Threads に基づくスレッド ライブラリが含まれる可能性があります (チュートリアル: http://www.ddj.com/cpp/184401518 ) 。
C# を使用している場合は、Gaston C. Hillar 著の書籍「C# 2008 and 2005 threaded programming」 - Packt Publishing - http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and- 2005-threaded-programming/bookが役に立ちます。マルチコア コンピューターを活用する面白い例を含むコードをダウンロードできるため、C# プログラマーに強くお勧めします。この本は、実践するためのコードがたくさんある素晴らしいガイドです。最も難しい概念を説明しながら、物語を語ります。