Workerの最近のブログ記事

前回は、単一の ByteArray オブジェクトを複数の Worker から共有する方法を紹介しました。 (ActionScript Woker 間での ByteArray オブジェクトの共有

その中で触れたように、共有 ByteArray 機能を使うときは、複数の Worker が同時に ByteArray オブジェクトを更新しないように、注意を払う必要があります。

そのためには、

  • アドミックなメソッドを利用する
  • Worker 間で、共有リソースの使用に対する占有権のコーディネートを行う

といった手段を用います。このうち前者のアトミックなメソッドは前回の記事の後半に紹介しました。

占有権のコーディネートに関しては、Flash Player 11.5 から Mutex というクラスが追加されました。この Mutex が今回のテーマです。

Flash Player 11.5 から、ActionScript Woker 間で ByteArray のオブジェクトを共有する機能が追加されました。

既に使用可能だった MessageChannel や SharedProperty を使ったオブジェクトの共有機能では、個々の Worker がそれぞれオブジェクトのコピーを保持します。そうすると、サイズの大きなデータ、例えばテクスチャなどを共有する場合、コピー用オブジェクト生成のための CPU 負荷やその保持に必要なメモリ量など、パフォーマンスに少なからず影響が出ることもありそうです。

一方、新しく追加された ByteArray の共有機能は、単一の ByteArray のオブジェクトを、複数の Worker から参照するというものです。そのため、データのコピー用に新たなオブジェクトの生成は不要ですし、当然、複製されたオブジェクトがメモリ領域を占めることもありません。

また、同一の ByteArray のオブジェクトを皆が参照するということで、ある Worker が ByteArray 内のデータを変更すると、それを共有する他の Worker にとっても値が変更されることになります。

Flash Player 11.4 のベータ版公開 (関連記事) に伴い、ベータ用の ASDoc が更新されました。マルチスレッド関連のクラスの仕様も、具体的に記述されています。

(ご参考までに、ActionScript Worker の概要は以前の記事でも紹介しています)

とはいえ、いきなり API を眺めるよりは、具体的な使い方から始めた方が楽だと思いますので、今回は、ベータ版と一緒に提供されている Worker のサンプルから、HelloWold の内容を解説します。

読み進める前に、以下のファイルをダウンロードして、中に含まれる HelloWorld.zip を展開して下さい。

なお、今回のベータで利用できる ActionScript Worker は、デスクトップ環境での利用を前提としたもので、デバイス環境 (AIR) からは利用できません。

Flash Player 11.3 が公開されたばかりですが、最新の Flash ランタイムのロードマップによれば、次のバージョンの Dolores から、いよいよマルチスレッド機能を ActionScript から利用できるということです。

複数のスレッドが使えると、スクリプトの実行を、メインスレッドとは別のスレッドに割り当てることができます。そうすると、今までは画面をフリーズさせる原因になっていたような重たい処理も、描画処理と並行して実行できるようになります。 (コアが複数あればですが)

この待望の (?) マルチスレッドに関する新しい API の情報が、製品担当者のブログに公開されていましたので、今回はその内容をご紹介します。 (A sneak peek: Concurrency with ActionScript Workers

といっても、あまりはっきり書かれていない箇所も多いため、主な箇所のみ要約します。ともあれ、昨年の MAX で話された内容からは大きく変わっている印象です。

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261