マーベリック株式会社のリチャード 伊真岡です。この連載では非同期処理に役立つアクターモデルを学ぶため、JavaとScalaから使えるOSSであり、アクターモデルの実装を提供するAkkaを紹介します。前回の記事では非同期処理によってもたらされるメリット、つまり処理全体の効率化を紹介しました。そしてアクターモデルによってミュータブルオブジェクトを含む非同期処理を安全に実装しやすくなることを述べました。第2回ではミュータブルオブジェクトの管理はなぜ難しいのか、そしてAkkaのアクターモデルの仕組みがなぜミュータブルオブジェクト管理を楽にしてくれるのかを解説します。
Akkaアクターモデルの概要
まずは簡単にAkkaのアクターモデルについて紹介しましょう。アクターモデルを利用するアプリケーションは、プログラムの小さな処理をアクターという単位に分け、多数のアクターを配置することでアプリケーション全体を構成します。アクター同士はお互いのメソッドを直接呼び出すことはなく、間接的なオブジェクト、Akkaの場合はメッセージキューを介してメッセージを送り合うことで協調して動作します。

Akkaのアクターモデルは非常に効率がよいことも知られていて、Akkaの公式ページに掲載されたベンチマークによると、1台のマシン上で毎秒5000万メッセージを送受信し、わずか1GBのヒープメモリの利用で250万ものアクターの生成を実現しています。

アクターモデルのより詳しい紹介は記事の後半に譲って、ここからはマルチスレッド環境でのミュータブルオブジェクト管理の難しさについて説明します。
マルチスレッドとCPU
非同期処理で重要になるマルチスレッドについておさらいします。ここで言うスレッドとはOSの処理単位であるOSスレッドのことを指し、マルチスレッドとは複数のスレッドを使うということです。OSはCPU上で実行するスレッドを適宜入れ替えます。この時CPU上で同時に実行可能なスレッドの上限はCPUコアの数と同じです。

前回の記事でも紹介したように、非同期処理を使えば処理全体を効率よく実行でき、例えば以下のようにバックグラウンドスレッドと使い分けることで、画面描画スレッドのフリーズを防げます。

この記事は参考になりましたか?
- この記事の著者
-
リチャード 伊真岡(リチャード イマオカ)
大学卒業後、9年間証券会社にてプログラマ兼技術サポートとして勤務。その後いくつかの企業でバックエンド・エンジニアや技術広報などを務める。 プライベートでは過去にScala/JavaのOSSであるakkaへ貢献。 Twitter:@RichardImaokaJP
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
