9章スレッドと同期のパフォーマンス
当初から、Javaでは複数のスレッドに対応しているというのがアピールポイントの1つでした。マルチコアあるいはマルチCPUのシステムが一般的になるよりも前の時代から、スレッドを使ったプログラムを簡単に作成できたというのは画期的なことでした。
パフォーマンスの観点からも、このメリットは明らかです。例えばCPUが2つあるなら、アプリケーションは従来の2倍の処理を行えるか、同じ処理を従来の2倍の速さで実行できるようになると考えられます。しかしこのためには、分割可能な形でプログラムを作成しなければなりません。プログラムのアルゴリズムを解析して自動的に並列化するような機能は、Javaには用意されていません。ただ、今日のコンピューター上での処理は明確に分割されていることがよくあります。例えばサーバーは個別のクライアントからリクエストを受け取って処理を行い、バッチ処理では一連のデータに対して同じ処理が行われ、数学的アルゴリズムでは処理が複数の構成要素へと分解されています。
この章では、Javaのスレッドや同期の性能を最大限に発揮させるための方法を紹介します。
9.1 スレッドプールとThreadPoolExecutor
スレッドを管理するためのコードは自分で作成することもでき、既存のスレッドプールを利用することもできます。Java EEのアプリケーションサーバーは、1つまたは複数のスレッドプールをベースとして作成されています。サーブレットの呼び出しが要求されると、その都度スレッド(同じかもしれず、別々かもしれません)が実行されて処理を行います。同様に、JavaのThreadPoolExecutor
を利用して作業を並列に行うということも可能です。
Java EEのアプリケーションサーバーの中にも、 ...
Get Javaパフォーマンス 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.