CodeZine(コードジン)

特集ページ一覧

アクターモデルは非同期処理におけるミュータブルオブジェクトの問題点をどう解決するのか

Akkaで学ぶアクターモデル入門 第2回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

 マーベリック株式会社のリチャード 伊真岡です。この連載では非同期処理に役立つアクターモデルを学ぶため、JavaとScalaから使えるOSSであり、アクターモデルの実装を提供するAkkaを紹介します。前回の記事では非同期処理によってもたらされるメリット、つまり処理全体の効率化を紹介しました。そしてアクターモデルによってミュータブルオブジェクトを含む非同期処理を安全に実装しやすくなることを述べました。第2回ではミュータブルオブジェクトの管理はなぜ難しいのか、そしてAkkaのアクターモデルの仕組みがなぜミュータブルオブジェクト管理を楽にしてくれるのかを解説します。

目次

Akkaアクターモデルの概要

 まずは簡単にAkkaのアクターモデルについて紹介しましょう。アクターモデルを利用するアプリケーションは、プログラムの小さな処理をアクターという単位に分け、多数のアクターを配置することでアプリケーション全体を構成します。アクター同士はお互いのメソッドを直接呼び出すことはなく、間接的なオブジェクト、Akkaの場合はメッセージキューを介してメッセージを送り合うことで協調して動作します。

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

 アクターモデルのより詳しい紹介は記事の後半に譲って、ここからはマルチスレッド環境でのミュータブルオブジェクト管理の難しさについて説明します。

マルチスレッドとCPU

 非同期処理で重要になるマルチスレッドについておさらいします。ここで言うスレッドとはOSの処理単位であるOSスレッドのことを指し、マルチスレッドとは複数のスレッドを使うということです。OSはCPU上で実行するスレッドを適宜入れ替えます。この時CPU上で同時に実行可能なスレッドの上限はCPUコアの数と同じです。

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


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:Akkaで学ぶアクターモデル入門
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5