第1章. 並行処理概要
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
並行性美しいソフトウェアの重要な側面である。何十年もの間、並行処理は可能であったが、実現は困難であった。並行処理ソフトウエアは、書くのが難しく、デバッグが難しく、保守が困難だった。その結果、多くの開発者はより簡単なパスを選び、並行処理を避けた。最新の.NETプログラミングで利用可能なライブラリーと言語機能により、並行処理ははるかに容易になった。Microsoftは、並行処理のハードルを大幅に下げることに成功した。以前は、並行プログラミングは専門家の領域であったが、最近では、すべての開発者が並行プログラミングを受け入れることができる(そして受け入れるべきである)。
並行処理入門
話を続ける前に、本書を通して使用する用語をいくつか整理しておきたい。これらは私自身の定義であり、異なるプログラミングテクニックを曖昧にしないために一貫して使っている。まず並行処理から始めよう。
- コンカレンシー
-
一度に複数のことをする。
並行処理がどのように役立つかは明らかだろう。エンドユーザーアプリケーションは、データベースに書き込んでいる間にユーザの入力に応答するために並行処理を使う。サーバ・アプリケーションは、最初のリクエストを終わらせながら2番目のリクエストに応答するために同時実行を使う。アプリケーションにある処理をさせながら、別の処理もさせる必要がある場合は、いつでも並行処理が必要だ。世界中のほとんどすべてのソフトウェア・アプリケーションは、同時実行の利点がある。
並行処理」と聞くと、ほとんどの開発者はすぐに「マルチスレッド」を思い浮かべるだろう。私はこの2つを区別したい。
- マルチスレッド
-
複数の実行スレッドを使用する並行処理の一形態。
マルチスレッドとは、文字通り複数のスレッドを使うことである。本書の多くのレシピで実証されているように、マルチスレッディングは並行処理の一形態であるが、確かにそれだけではない。実際、低レベルのスレッド型を直接使用することは、最新のアプリケーションではほとんど意味がない。そのため、時代遅れのテクニックの紹介は最小限にとどめることにする。本書のマルチスレッド・レシピでは、Thread やBackgroundWorker 型は使用していない。
警告
new Thread() と入力した時点で、プロジェクトはすでにレガシー・コードを持っているのだ。
しかし、、マルチスレッディングが死んだという考えを持つ必要はない!マルチスレッディングは、スレッドプールで生き続けている。スレッドプールは、需要に応じて自動的に調整される仕事をキューに入れるのに便利な場所だ。スレッドプールは、並行処理のもうひとつの重要な形態である並列処理を可能にする。
- 並列処理
-
、同時に実行される複数のスレッドに分担することで、多くの仕事をこなす。
並列処理(または並列プログラミング)では、マルチスレッドを使って複数のプロセッサコアを最大限に活用する。最近のCPUは複数のコアを搭載しているが、やるべき仕事が多い場合、1つのコアにすべての仕事をさせ、他のコアをアイドル状態にしておくのは意味がない。並列処理では、仕事を複数のスレッドに分割し、それぞれ別のコアで独立して実行することができる。
並列処理はマルチスレッドの一種であり、マルチスレッドは並行処理の一種である。最新のアプリケーションでは重要だが、多くの開発者にはあまり馴染みのない ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access