同期処理・非同期処理について

前回は、Unityを使って3Dモデルを動かしてみよう!でした。
今回は、同期処理・非同期処理について説明していきたいと思います。

◇同期処理、非同期処理とは
同期処理とは、一つのスレッドで処理を行うことです。
非同期処理とは、複数のスレッドで処理を行うことです。

※スレッドとは、OS上でのプログラムの最小の実行単位のことです。

◇メリット・デメリット
■同期処理
・メリット
処理の流れが保障されることです。
例えば①、②、③という3つの処理があったとき、
その処理が①から②、③と順番に流れるというのが確実に言えることです。

・デメリット
既に処理が実行中の場合、その処理が完了するまでの間は、他のイベントは割り込むことが出来ないので、
発生したイベントを処理できず、アプリが停止しているように見えてしまいます。

■非同期処理
・メリット
複数のシーケンスを同時に実行可能なことです。

・デメリット
複数の処理を制御しなければならず、
各処理を管理する仕組みが必要になり、同期処理に比べて複雑になってしまいます。

デッドロックが発生しないように考慮した設計、実装を行う必要があります。

※デッドロックとは、複数のスレッドでお互いに処理が終わるのを
永久に待ち続けてしまって、処理が止まることです。

◇具体例
ループ処理で100万回の計算を行いその結果を返却するgetValueというメソッドがあり、
 その関数から受け取った値を画面に表示するといった処理を作成する場合
 同期・非同期ではそれぞれ以下のようになります。

■同期処理(メインスレッドのみ)
※メインスレッドで処理をする

getValueを実行(この時呼び元の処理は一時的に止まっている)

100万回計算中(※計算を行っているのがメインスレッドのため、ボタンイベント等が
発生しても、それを処理することができない)

getValue関数が値を返却

メインスレッドでgetValueにより取得した値の表示要求を行う
  

■非同期処理(メインスレッドとサブスレッドを用意)

メインスレッド内で、サブスレッドを起動してgetValueを実行する

一旦メインスレッドの処理が終わる
※この間計算処理を行っているのはサブスレッドの為、計算結果を受け取るまでの間、
メインスレッドではボタンイベント等を処理することができる

サブスレッドの処理が終わり、getValue関数がメインスレッドに値を返却


メインスレッドでgetValueにより取得した値の表示要求を行う

◇最後に
今回は、同期処理・非同期処理とはなにか?ということをご紹介しました。
次の機会に、java言語のThreadクラスを利用して、実際に同期・非同期処理を行う
サンプルプログラムを作成し、ご紹介したいと思います。


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*