16章マルチスレッド

 マルチスレッドを使用すると、1つのアプリケーションで複数のコードを同時に実行できます。マルチスレッドを使用する理由は2つあります。1つはコンピュータの並列処理性能を活用できるからです。近年はマルチコアCPUの普及が進んでおり、CPUの潜在的な性能を最大限に活用するには、CPUに複数の処理を渡してすべてのコアに有益な処理を行わせる必要があります。マルチスレッドコードを書くもう1つの一般的な理由は、ディスクからの読み取りのような低速な処理を実行している間も処理が止まらないようにするためです。

 2番目の問題を解決する方法はマルチスレッドだけでありません。どちらかというと非同期処理のテクニックの方が適しています。C#には非同期処理をサポートするための機能があります。非同期実行は必ずしもマルチスレッドを意味するわけではありませんが、実際にはこれら2つは密接な関係にあり、本章でも非同期プログラミングモデルについて言及します。ただし、本章はスレッドの基本に主眼を置いています。非同期コードをサポートする言語機能については「17章 非同期言語機能」で説明します。

16.1 スレッド

 .NETが動作できるすべてのOSでは、それぞれのプロセスが複数のスレッドを持つことができます。各スレッドは独自のスタックを持ち、OSのサポートによってあたかも完全なCPUハードウェアスレッドであるかのように見えます(以下の補足コラム「プロセッサ、コア、ハードウェアスレッド」を参照)。コンピュータに備えられたハードウェアスレッドの個数よりはるかに多くのOSスレッドを作成できます。OSがCPUを仮想化し、あるスレッドから別のスレッドにコンテキストスイッチを行うからです。本書の執筆に使用しているマシンには16個のハードウェアスレッドがあり、それなりに十分な個数ですが、マシン上で実行中のさまざまなプロセスを合計すると8,893スレッドが実行されています。 ...

Get プログラミングC# 第8版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.