回答編集履歴
3
update
answer
CHANGED
@@ -27,12 +27,12 @@
|
|
27
27
|
|
28
28
|
> async/awaitはネットワーク系プログラミングの世界だけで必要なものだと勝手に思っていた
|
29
29
|
|
30
|
-
他回答でも言及がありますが、Microsoft社の
|
30
|
+
他回答でも言及がありますが、Microsoft社のC#言語で広く普及した構文(時系列的には[F#言語が発祥](https://en.wikipedia.org/wiki/Async/await)らしい)と思います。ネットワーク処理に限らず、ファイルI/OやGUIといったイベント駆動処理での利用が想定にあったと思われます。
|
31
31
|
|
32
32
|
> C++11以降はasync/awaitが存在することを最近知りました
|
33
33
|
|
34
34
|
2019年現在の純粋なC++言語仕様(C++17)としては、async/awaitサポートは(まだ)ありません。
|
35
|
-
将来的に導入が検討されている [C++20コルーチン機能](https://yohhoy.hatenablog.jp/entry/2019/09/06/174712) では、
|
35
|
+
将来的に導入が検討されている [C++20コルーチン機能](https://yohhoy.hatenablog.jp/entry/2019/09/06/174712) では、キーワード名が異なるもののasync/await構文が提供されます。
|
36
36
|
|
37
37
|
----
|
38
38
|
|
2
update
answer
CHANGED
@@ -6,13 +6,15 @@
|
|
6
6
|
> どの説明を見ても「それって単に別スレッドで処理しておけば同じことできるのでは?」という感想です。
|
7
7
|
> async/awaitはマルチスレッド処理の便利構文「以上」のものなのでしょうか?
|
8
8
|
|
9
|
-
async/await構文は必ずしもマルチスレッドと1:1対応させる概念ではありません。スレッドやコルーチン、ファイバー、イベントループといった非同期処理のための仕組みの存在を前提とし、それらの上で実際の非同期処理を記述するときに用いる構文要素です。効率性や実現性を無視すれば、全てのasync/await構文はそれを使わないプログラムに書き換え可能です。(フレームワークやプログラミング言語の表現限界はあるので、あくまで原理的な話としてですが)
|
9
|
+
async/await構文は必ずしもマルチスレッドと1:1対応させる概念ではありません。スレッドやコルーチン、ファイバー、イベントループといった **非同期処理のための仕組みの存在を前提とし**、それらの上で実際の非同期処理を記述するときに用いる構文要素です。効率性や実現性を無視すれば、全てのasync/await構文はそれを使わないプログラムに書き換え可能です。(フレームワークやプログラミング言語の表現限界はあるので、あくまで原理的な話としてですが)
|
10
10
|
|
11
11
|
> async/awaitは単なる便利構文に過ぎないのか、それとも一種の「新しい考え方」なのでしょうか?
|
12
12
|
> 単なる便利構文なら必要なときに覚えれば十分かもしれませんが、「新しい考え方」なのであれば、理解しておきたいです。
|
13
13
|
|
14
14
|
async/awaitそれ自身は新しいプログラミング・パラダイムとまでは行かずとも、新しいプログラミング技法ではあると思います。多くのプログラミング言語で受け入れられているのも事実ですから、理解しておくに越したことはないと思います。
|
15
15
|
|
16
|
+
非同期処理を実現する何らかのバックエンド機構に対して、async/await構文はプログラマ向けに提供されるフロントエンド構文という解釈になります。マルチスレッド処理は、このバックエンド機構の選択肢の一つです。
|
17
|
+
|
16
18
|
> また、これは各言語の実装に依るのかもしれませんが、async/awaitは呼び出されるたびにスレッドの生成/破棄を行うものでしょうか。
|
17
19
|
> もしそうだとすると(スレッドの生成・破棄は高コストな処理なので)あまり頻繁にasync/awaitは使わないほうが良いか?と考えてしまいます。
|
18
20
|
> それとも裏でひとつのスレッドを使い回すようなことまでしてくれるのでしょうか。
|
1
update
answer
CHANGED
@@ -23,8 +23,12 @@
|
|
23
23
|
|
24
24
|
----
|
25
25
|
|
26
|
-
>
|
26
|
+
> async/awaitはネットワーク系プログラミングの世界だけで必要なものだと勝手に思っていた
|
27
27
|
|
28
|
+
他回答でも言及がありますが、Microsoft社の C#言語 で導入された構文(実際には F#言語 が発祥らしい)です。ネットワーク処理に限らず、GUIやファイルI/Oなどのイベントドリブン処理での利用が想定にあったと思われます。
|
29
|
+
|
30
|
+
> C++11以降はasync/awaitが存在することを最近知りました
|
31
|
+
|
28
32
|
2019年現在の純粋なC++言語仕様(C++17)としては、async/awaitサポートは(まだ)ありません。
|
29
33
|
将来的に導入が検討されている [C++20コルーチン機能](https://yohhoy.hatenablog.jp/entry/2019/09/06/174712) では、(キーワード名は異なるものの)async/await構文が提供されます。
|
30
34
|
|