構造化された並行性
構造化された並行性(こうぞうかされたへいこうせい、英: structured concurrency)は、プログラミング言語における並行処理、非同期処理のAPIのパラダイムのひとつで、呼び出した非同期処理ルーチンが完了するまで呼び出し元の特定のブロックが完了しないことを保証することをいう。 構造化された並行性の「構造化」(structured) の名は、1960年代に提唱されたプログラミング手法である構造化プログラミング (structured programming) を引き継いでいる。 構造化された並行性は、非同期処理の開始と終了が明確に入れ子になることが非同期処理の構造化へのアプローチとなるとみなし、このことが明快さのみならずエラー処理などにおいて従来の手法より有利な点をもつとする。
スミスは、こうした問題を構造化プログラミングが提唱されたとき問題とされた制御フローのスパゲッティ化と対比し、非同期処理の呼び出し(Erlang言語のspawn、Go言語のgoなど)、またイベント発生などで開始されるコールバックを用いた処理、さらにpromiseやfutureと呼ばれる遅延された処理の一部が、かつてのgoto文と同様の問題を引き起こしているとした。
エドガー・ダイクストラらがあげたgoto文などの問題は、プログラムの一部のみを見ただけでは制御フローを把握できないというプログラマの推論の抽象化を破壊したことにあった。これに対して構造化された制御構文は、その始まりと終わりを明確に集約するという適切な制約を課すことで入れ子状にブラックボックス化できるようにし、この問題を解決した。 構造化された並行性では、非同期処理の呼び出し元の完了が、それが呼び出した非同期処理の完了を待つという単純な制約を新たに課すことによって、再度ブラックボックス化を可能としプログラマの推論を容易なものとするとする。 さらに、処理が入れ子であることが保証されることによって、リソースの自動解放や例外処理も通常の逐次処理と同じように機能させられ、キャンセルやタイムアウトへの対処も容易だとする。