『非同期処理』とは? *

『非同期処理』の対義語が『同期処理』です。同期処理ではプログラムは上から下に順に実行されます。これに対して、非同期処理とは時間のかかる処理をしている間、別の処理が実行できるようにするものです。

そのため、非同期処理が必要になるのは、サーバーからデータを取得するなど、処理が一瞬で終わらないものです。

非同期処理の分かりやすい例え *

非同期処理を理解するのに分かりやすい例えに「お昼休みの効率的な時間の使い方」があります。Aさんはお昼休みに、近所のお弁当屋でお弁当を買って、その隣にあるコンビニと本屋で買い物をして職場に戻る計画を立てました。しかし、お弁当屋は注文を受けてからお弁当を作るので、待ち時間が10分ほど必要です。

同期処理的なお昼休みは以下のようになります。

  • お弁当屋で弁当を注文
  • 10分待って注文した弁当を受け取る
  • コンビニで買い物
  • 本屋で買い物
  • 職場に戻る

これに対して非同期処理的なお昼休みは以下のようになります。

  • お弁当屋で弁当を注文
  • 弁当屋を出て、コンビニで買い物
  • 本屋で買い物
  • お弁当屋に戻って弁当を受け取って職場に戻る

というのも、弁当を注文してから受け取るまでの10分間をただ待っているだけではなく、その間にコンビニと本屋の買い物をすれば効率的に時間が使えます。

処理が分かりやすいのは同期処理です。なぜなら仕事を一つずつこなしていくからです。しかし、非同期処理ができれば、コンピューターのリソースを効率的に使うことができるというわけです。

非同期処理の使い分け *

なでしこ3の親言語であるJavaScriptでは非同期処理をどのように記述するかが長年の課題でした。なでしこでも非同期処理を記述できます。

コールバック方式(イベント方式) *

なでしこの命令に「**時」や「**後」というものがあります。これは、コールバック方式で非同期処理を行います。

例えば、サーバーからデータを取得する「AJAX送信時」があります。この命令はサーバーからデータを取得すると、「AJAX送信した時には」から「ここまで」の間に書いたプログラムが実行されます。

以下は郵便番号APIにアクセスし、データを取得するプログラムです。

   v3.3.81

詳しくは、文法/無名関数をご覧ください。

非同期専用の命令を使う *

(v3.2.44以降) 非同期を意識せず使えるように配慮された新しい命令セットがあります。これらの命令を使えば、他のなでしこ命令と同じように非同期処理が可能です。

   v3.3.81



以下の機能は、緩やかに非推奨、あるいは非推奨の機能です。

!非同期モード (緩やかに非推奨) *

そして、v3.2.20以降で実装されたのが、なでしこのプログラムを完全な非同期モードで実行するのが非同期モードです。プログラムの先頭に「!非同期モード」と記述します。

   v3.3.81

上記の例は、非同期モードを使わなくても次のように記述できます。

   v3.3.81

逐次実行方式 (非推奨の機能) *

これに対して、「逐次実行」構文を使う方法があります。これを使うと、あたかも上から下へと順にプログラムが実行されるように記述できます。

なでしこの命令の「**逐次**」というものは、この「逐次実行」構文を使う事が求められます。

   v3.3.81

こちら、詳しくは文法/逐次実行をご覧ください。なお、逐次実行の内側では、繰り返し文などを使えないという欠点があります。

参考 *

Konawiki3 v.3.2.3