Symbian OS開発の勘所

Symbian OS開発の勘所 − Moving to Symbian OS 第6回

並行処理の奥義、非同期フレームワークとは?

大久保 潤 管理工学研究所 2007/7/3

各環境からSymbian OSへ移行する人の多くが持つ「非同期フレームワーク」の誤解を今回と次回で解消させよう。まずはSymbian OSの並行処理について解説する。(編集部)

- PR -

 メモリ管理、非同期フレームワーク、クライアントサーバ、これらのコンセプトが

により統合されている。これがSymbian OSの特徴であるということを、これまでの連載で説明してきました。

 連載も進み、外堀も埋まってきたということで、いよいよSymbian OSの3大ポイント(図1)の2番目にして多くの誤解の源泉、非同期フレームワークの解説を行いたいと思います。誤解とは穏やかならざる表現ですが、この連載を行うきっかけになったのが、まさにこの誤解の多さでした。

  図1 Symbian OSの3大ポイント

 ご存じのとおりC++では(Cでも同じですが)、並行処理に対する規定がありません。この部分に関しては、それぞれの実行環境ごとに異なったライブラリが用意されます。つまりC++/Cで書かれているからといって、並行処理に関してはポータビリティがないのです。常識? そう、まさに常識に属する話だと思うのですが、なぜか多くのソフトウェアエンジニアはほかのOSへの引っ越しに際して、それまでの環境と同じ並行処理モデルが通用するはずだ、という根拠のない期待を持つようです(注1)。それはSymbian OSへの引っ越しにおいても例外ではないようで、第1回に記した「アレがないシンドローム」のかなりの部分を、この並行処理に関する誤解が占めるようです。

 つまり今回のゴールは、各環境から引っ越してきた人がSymbian OSの並行処理に対して抱く誤解を解くことにあります。以下、順を追って進めていきましょう。

注1:POSIXは「Portable Operating System Interface」なンだからすべてのOSはPOSIXに従っておけばよいのではないか、というナイーブな意見があります。しかしPOSIXは決して透明無色なインターフェイスではありません。その出自から明らかなように、UNIXに固有な機構を前提とする仕様となっています。例えばシグナルなどがそうです。さらに出来の悪いことに、非同期のイベントを集約して待つための仕掛けを持っていません。この点については後編で詳しく述べます。


ブロッキング再考

 マルチタスク環境におけるシステムの応答性を考えるとき、ブロッキングのことを避けて通ることはできません。

 図2 同期型APIのシーケンス図

 図2にあるように、せっかく複数の実行コンテクスト(注2)を用いてシステムを構成したとしても、要求が完了するまで待つ設計では意味がありません。ブロッキング期間には外部からのイベントを受け取ることができないため、システムの応答性を確保できなくなってしまいます。

注2:スレッドでもタスクでもお好きな用語でイメージしてもらって構いません。

 例えばPOPサーバに対して新着メールを取りに行く、という処理を図2中の[サービスプロバイダ1]に委譲したとします。最初のブロッキング区間には、

  • コネクション確立(場合によっては回線接続が)
  • POPサーバとの認証処理
  • 実際のメールデータの取得処理

など、一切合切が含まれることになります。その期間[クライアント]はどのようなイベントに対しても反応することができません。ブロッキング区間にメール一覧を送信者のアドレス順に並べ替えようとしたとすると、いったいどんなプログラム構成にすればよいのでしょう。ブロッキング区間は操作が一切止まることにしますか?

 しかしそれでは避けられない話があります。例えばメールの受信中断はどうやって指示をしたらよいのでしょうか。よくある長時間ブロッキング対策は、以下のようなものでしょう(筆者もWindowsでプログラムを書いているときには、こんなことをやったような……)。

  • 中断のキーシーケンスをホットキーとして登録しておき、発生した時点で[サービスプロバイダ1]のしかるべき関数を呼び出すというシグナルモデル
    これはUI(ユーザーインターフェイス)にかなりの制限が付きます。
  • キャンセルのダイアログを別の実行コンテクストで表示させておき、そこに対して中断指示が発生しなかったか[サービスプロバイダ1]がチェックしに行くというポーリングモデル
    この場合[サービスプロバイダ1]がUIを持つ(少なくとも知る)という構造上のひずみが発生します。

 どちらの方法も同期APIを基本としてとらえたうえで、キャンセルを例外的に処理しようとするため、システム構成に制約や問題が発生しています。

  • 連載バックナンバー
  • 全記事インデックス
  • 組み込み開発トップ
  • MONOistトップ

スキルアップ/キャリアアップ(JOB@IT)

スポンサーからのお知らせ

- PR -
@IT Sepcial

震災関連・復興支援情報

震災関連・復興支援情報
@IT MONOist/EE Times Japan/環境メディアの製造業技術者向け3メディアを中心に、震災関連/復興支援情報を集めました

次世代エンベデッドコーナー

次世代エンベデッド
“次世代”の組み込み機器を開発するエンジニアを支援するコーナー。新潮流・新技術をインタビューやコラム、解説記事で分かりやすく紹介!

Windows Embeddedコーナー

Windows Embedded
Windows Embedded専門コーナー。Windows Embedded StandardやWindows Embedded CEをはじめとする「Windows Embedded」ファミリの最新動向や技術情報をお届けします!!

Androidコーナー

Android
Android専門コーナー。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報がここに集結!!

@IT MONOist 求人情報

- PR -