>>232
無駄待ちしない非同期プログラミングは特定の言語に依存しない一般的なプログラミング手法。
どの言語でもそれが直接見えるか否かに関わらず一番下では当然コールバックになっている。
例えばそれを遅延してコールバック指定できるタイプのfutureやpromiseを返り値としてもらうのはデザインパターンの問題。
こうすることでターゲットのオブジェクトに直接コールバックを渡すのではなくfutureやpromiseを介することで自分側で制御できる。
更にそれを表記上はコールバックをしているように見せないためにco-routineやgeneratorを使って見た目だけ同期っぽく書くことも可能。
つまり表記上は無駄待ちでブロックされる同期呼び出しとほぼ同じ形でコーディングが出来る。
そしてそれら上記を全て意識せずに簡潔に書けるようにしたものがいわゆるasync/awaitとなる。
この正しいawaitを用いれば見た目は同期呼び出しなコードなのに実態は非同期呼び出しかつ無駄待ちせずそのスレッド自体がその間も他のコードを実行可能となる。
これにより例えばシングルスレッドのみ使用であっても多数の通信やファイルアクセスなどを一切無駄待ちせずに非同期に並行して効率よく処理することが可能となる。

具体的に複数の最終的にコールバックされるペンディング状態を管理するのは多くの場合にメインのイベントループオブジェクトである。
これは言語によっては言語に内在するケースもあれば標準モジュール/ライブラリとして提供される場合もあれば自作する場合もある。
抽象化された上位のものを用いていてもその内部では結局select()やpoll()などのシステムコールが中核に位置することになる。
このオブジェクトで多数のファイルディスクリプタ(通信も結局ソケットなのでこれになる)管理とタイマー管理などを集中管理する。
全てのコールバックはここから直接もしくはfutureやpromiseなどを介して行われることになる。
これらの機構が直接見えるかどうかは各言語およびどこまで抽象化されたライブラリを用いるのかに依存する。
例えば貴方が言及しているJavaScriptではブラウザとNode.jsどちらも実行環境に内在されているため利用者は自分で準備や構築をする必要はない。