Akkaアクターモデルの概要
まずは簡単にAkkaのアクターモデルについて紹介しましょう。アクターモデルを利用するアプリケーションは、プログラムの小さな処理をアクターという単位に分け、多数のアクターを配置することでアプリケーション全体を構成します。アクター同士はお互いのメソッドを直接呼び出すことはなく、間接的なオブジェクト、Akkaの場合はメッセージキューを介してメッセージを送り合うことで協調して動作します。
Akkaのアクターモデルは非常に効率がよいことも知られていて、Akkaの公式ページに掲載されたベンチマークによると、1台のマシン上で毎秒5000万メッセージを送受信し、わずか1GBのヒープメモリの利用で250万ものアクターの生成を実現しています。
アクターモデルのより詳しい紹介は記事の後半に譲って、ここからはマルチスレッド環境でのミュータブルオブジェクト管理の難しさについて説明します。
マルチスレッドとCPU
非同期処理で重要になるマルチスレッドについておさらいします。ここで言うスレッドとはOSの処理単位であるOSスレッドのことを指し、マルチスレッドとは複数のスレッドを使うということです。OSはCPU上で実行するスレッドを適宜入れ替えます。この時CPU上で同時に実行可能なスレッドの上限はCPUコアの数と同じです。
前回の記事でも紹介したように、非同期処理を使えば処理全体を効率よく実行でき、例えば以下のようにバックグラウンドスレッドと使い分けることで、画面描画スレッドのフリーズを防げます。