Um Ihre erste und zweite Frage zu beantworten:
Nicht blockieren ist praktisch dasselbe wie asynchron - Sie tätigen den Anruf und erhalten später ein Ergebnis, aber währenddessen können Sie etwas anderes tun. Blockieren ist das Gegenteil. Sie warten auf die Rückkehr des Anrufs, bevor Sie Ihre Reise fortsetzen.
Jetzt klingt Async / Non-Blocking-Code absolut fantastisch und ist es auch. Aber ich habe warnende Worte. Async / Non-Blocking eignet sich hervorragend für Arbeiten in eingeschränkten Umgebungen, z. B. in Mobiltelefonen. Beachten Sie die begrenzte CPU / den begrenzten Arbeitsspeicher. Es ist auch gut für die Front-End-Entwicklung geeignet, bei der Ihr Code auf irgendeine Weise auf ein UI-Widget reagieren muss.
Async ist von grundlegender Bedeutung für die Funktionsweise aller Betriebssysteme - sie erledigen im Hintergrund alles für Sie und wecken Ihren Code, wenn sie das getan haben, wonach Sie gefragt haben, und wenn dieser Aufruf fehlschlägt, wird Ihnen mitgeteilt, dass dies nicht der Fall ist arbeiten entweder mit einer Ausnahme oder einer Art Rückkehrcode / Fehlerobjekt.
An dem Punkt, an dem Ihr Code nach etwas fragt, dessen Beantwortung eine Weile dauern wird, weiß Ihr Betriebssystem, dass es mit anderen Aufgaben beschäftigt sein kann. Ihr Code - ein Prozess, ein Thread oder ein gleichwertiger Block. Ihr Code weiß überhaupt nicht, was sonst noch im Betriebssystem vor sich geht, während er darauf wartet, dass diese Netzwerkverbindung hergestellt wird, oder während er auf diese Antwort von einer HTTP-Anforderung wartet oder während er auf das Lesen / Schreiben einer Datei wartet, und demnächst. Ihr Code könnte "einfach" auf einen Mausklick warten. Während dieser Zeit war es tatsächlich so, dass Ihr Betriebssystem nahtlos "Ereignisse" verwaltet, plant und darauf reagiert - Dinge, auf die das Betriebssystem achtet, wie z. B. Speicherverwaltung, E / A (Tastatur, Maus, Festplatte, Internet), andere Aufgaben, Fehlerbehebung usw.
Betriebssysteme sind verdammt hart im Nehmen. Sie sind wirklich gut darin, all die komplizierten asynchronen / nicht blockierenden Dinge vor Ihnen, dem Programmierer, zu verbergen. Und so kamen die meisten Programmierer mit Software dahin, wo wir heute sind. Jetzt stoßen wir an die CPU-Grenzen. Die Leute sagen, dass Dinge parallel gemacht werden können, um die Leistung zu verbessern. Dies bedeutet, dass Async / Non-Blocking eine sehr günstige Vorgehensweise ist, und ja, wenn Ihre Software dies erfordert, kann ich dem zustimmen.
Wenn Sie einen Back-End-Webserver schreiben, gehen Sie vorsichtig vor. Denken Sie daran, dass Sie für viel billiger horizontal skalieren können. Netflix / Amazon / Google / Facebook sind jedoch offensichtliche Ausnahmen von dieser Regel, nur weil es für sie billiger ist, weniger Hardware zu verwenden.
Ich werde Ihnen sagen, warum asynchroner / nicht blockierender Code ein Albtraum bei Back-End-Systemen ist.
1) Es wird zu einem Denial-of-Service für die Produktivität ... Sie müssen VIEL mehr nachdenken und machen dabei viele Fehler.
2) Stapelspuren in reaktivem Code werden nicht mehr zu entziffern - es ist schwer zu wissen, was was, wann, warum und wie heißt. Viel Glück beim Debuggen.
3) Sie müssen mehr darüber nachdenken, wie Dinge scheitern, insbesondere wenn viele Dinge nicht mehr in der richtigen Reihenfolge sind, wie Sie sie gesendet haben. In der alten Welt haben Sie jeweils eine Sache getan.
4) Es ist schwieriger zu testen.
5) Es ist schwieriger zu pflegen.
6) Es ist schmerzhaft. Das Programmieren soll Freude und Spaß machen. Nur Masochisten mögen Schmerz. Menschen, die gleichzeitig / reaktive Frameworks schreiben, sind Sadisten.
Und ja, ich habe sowohl synchron als auch asynchron geschrieben. Ich bevorzuge synchron, da 99,99 Back-End-Anwendungen mit diesem Paradigma auskommen können. Front-End-Apps benötigen ohne Frage reaktiven Code, und das war schon immer so.
Ja, Code kann asynchron, nicht blockierend UND ereignisbasiert sein.
Das Wichtigste bei der Programmierung ist, sicherzustellen, dass Ihr Code funktioniert und in akzeptabler Zeit reagiert. Halten Sie sich an dieses Schlüsselprinzip und Sie können nichts falsch machen.