- 775 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:07:37.69 ID:xM1Kf0e8.net]
- >>751
非同期プログラミングの話をしているだけなのにそんなasync/awaitに限定するのがおかしいのではないかね さらにいえばasync/awaitの話とpromise/futureの話を同類に捉えているからちゃんと理解していないのでは? 非同期関数をなにか特殊なもののように捉えているのも怪しい 非同期ブログラミングとは同期ブロッキングI/Oによる非効率で無駄な方法を排除するプログラミングであって 昔も今も中心部分にselectやepoll等のシステムコールを核とするループすなわち高度化した時のスケジューラーで成り立っている そして読み書き可能になったら読み書きをするという極めて自然なプログラミング もちろんこのスケジューラー部分で割り込みやタイマー含めて共通管理できるため「相性が悪く複雑になる」というのも間違いだ もちろん読み書き可能になったら教えて!と最初に登録するところから始まるわけだから 読み書き可能になったぜ!と教えてもらう部分がコールバックとなるのは当然の話 だからそれをまとめて包んだ非同期関数は当然コールバックとなりI/O待ちブロックされる同期関数より極めて効率が良い promise/futureはこの部分のインターフェース部分だけを抽象化しただけに過ぎず この中身は単なる状態管理だから具体的なI/Oやタイマー等と関係なく共通して使える点もプログラミングの利便性を向上させている そしてこれ自体はコールバックを無くしているわけではなく例えばクロージャを渡すメソッドなどを用意することでコードの見た目を改善している これで非同期関数のインタフェースとして(直接)コールバック系と(間接に行う)promise/future系((およびその両対応))に分かれた 以上ここまでの話は生のC言語でも普通にプログラミング可能な話である (メソッド呼び出しを除く) もちろんスレッドなんか存在しない環境でもシングルスレッドにて並行に動作するの非同期プログラミング 当然ながらマルチスレッドでも同じように動作させられる
|

|