2023年 秋期 応用情報技術者試験 問8
スレッド処理
B社は、首都圏に約50店の美容室を運営する美容室チェーンである。B社では顧客に顧客カードを発行し、B社の全店舗で顧客カードを持参した顧客に割引価格でサービスを提供している。近年、テレワークなどで外出機会が減ったことによって、顧客の来店回数が減少しており、売上げが減少傾向にある。
そこでB社では、顧客に美容室に来てもらうために販売促進活動を行うことにした。この販売促進活動の一つとして、スマートフォン向けサービス(以下、新サービスという)を提供することにした。この新サービスの開発は、B社のWebサイトの構築経験がある情報システム担当のCさんが担当することになった。
【新サービスの機能】
Cさんは新サービスの開発に向けて、全店舗の店長から"顧客にもっと来店してもらうためのアイディア"を募った。集まったアイディアを基にCさんが考えた新サービスのトップ画面と四つの機能を図1に示す。

【新サービスを提供するアプリケーションソフトウェア】
次にCさんは、新サービスを提供するためのアプリケーションソフトウェア(以下、アプリケーションという)について調査した。その結果、アプリケーションの代表的な種類には、aとbがあることが分かった。aは、サーバでHTMLを生成してスマートフォンに送信する。スマートフォンのOSの差異を考慮した開発は不要だが、カメラやGPSなどのデバイスの利用が一部制限される。一方bは、それ自体をスマートフォンにインストールして実行するもの(以下、スマホアプリという)である。OSの差異を考慮した開発が必要であるが、カメラやGPSなどのデバイスを制限なく利用できる。この調査結果からCさんは、新サービスはbとして開発することを提案し、上司の承認を得た。
【トップ画面の開発】
次にCさんは、Java言語を用いてスマホアプリのトップ画面の開発に着手した。トップ画面を実装し、画面の描画処理の中で、顧客番号に関連付けられた顧客氏名、来店日付、担当美容師氏名の情報をサーバから取得して画面に表示する処理を行うようにした。しかし、このスマホアプリを実行したところ並行処理に関するエラー(例外)が発生し、スマホアプリの実行が中断された。
このエラーの原因を究明するために、スマートフォン上で動作するGUIアプリケーションにおける並行処理を行う仕組みに関して調査を行った。スマートフォンのOS上で処理を実行するための仕組みとしてcとdとがある。cは、独立したメモリ空間を割り当てて実行されるものであり、多くの場合アプリケーションの実行単位ごとに一つのcで実行される。一方dは、一つのメモリ空間を共有しながら実行されるもので、一つのcの中で、複数のdを実行することができる。
GUIアプリケーションの開発では、画面描画、画面操作などの画面ユーザーインタフェースに関する処理を行うメインスレッドと、メインスレッドと並行して比較的処理時間が長い処理を行う①バックグラウンドスレッド(以下、ワーカースレッドという)とを分けて実装する必要がある。また、ワーカースレッドによる画面ユーザーインタフェースに関する処理は禁止されていることが分かった。
そこで、トップ画面の処理をメインスレッドとワーカースレッドとに分けて実装することにし、トップ画面を完成させた。
【おすすめの髪型機能の開発】
次にCさんは、おすすめの髪型機能の開発に着手した。おすすめの髪型機能の実現に必要な処理を表1に示す。なお、表1中の開始条件とは当該処理の実行を開始するために必要な条件であり、処理時間は当該処理の実行に必要なスマートフォン内の計算時間と標準的な通信時間の合計時間である。
処理名 | 処理内容 | 開始条件 | 処理時間 (ミリ秒) |
---|---|---|---|
処理1 | スマートフォンのカメラデバイスから取得したカメラ映像を画面に表示して、顧客が撮影ボタンを押した時点の画像を顧客写真として保存する。 | なし | 100 |
処理2 | 画面に"処理中"のメッセージを表示する。 | 処理1の完了 | 10 |
処理3 | 処理1で保存した顧客写真から顔の特徴点を抽出する。 | 処理1の完了 | 100 |
処理4 | 処理1で保存した顧客写真から毛髪部分を削除する画像処理を行う。 | 処理3の完了 | 150 |
処理5 | 処理3で抽出した特徴点をサーバに送信し、おすすめの髪型の画像を取得する。 | 処理3の完了 | 200 |
処理6 | 処理4の結果画像と処理5の画像を合成する。 | 処理4、処理5の完了 | 50 |
処理7 | 処理6で合成した写真を画面に表示する。 | 処理6の完了 | 10 |
表1の七つの処理を行うために、②メインスレッドと二つのワーカースレッドを作成して処理を行うプログラムを実装した。処理4と処理5は並行に実行できるので、別々のワーカースレッドで処理することにした。このとき、処理6の実行の開始条件は処理4と処理5が共に完了していることなので、二つのスレッドの完了を待ち合わせるe操作を処理6のプログラムに記載した。
Cさんは、処理1〜処理7で構成されるおすすめの髪型機能を実装してテスト用に準備したスマートフォンで実行したところ、通信環境の良い場所では正常に動作したが、通信環境が悪い場所ではサーバからの応答を待ち続けてしまう問題が発生した。
この問題を解決するため③処理5のプログラムにある処理を追加した。
その後、Cさんはスマホアプリの全ての機能の開発とテストを完了させ、B社は新サービスを用いた販売促進活動を開始した。