Categories
程式開發

代碼像同步,像異步一樣工作


前言.

打從敲下”Hello World!”,咱們算入行了。我開始寫代碼,和用計算器差不多:

  • 輸入:1 + 1
  • 結果:2

代碼一路順著走,不開叉。

生涯第1個波折,是學到條件判斷,像這樣:

  • a = 1,b = 1
  • if a + b = 2 print “這都知道?”else print “答對了”

代碼開始有不同走向,有點繞,還能駕馭。

再後來就遇到人生大哉問:媽和媳婦一起掉河裡,你救誰?

翻譯一下,如何同時運行代碼A和代碼B(並行)?

為一起救,我學過各種泳姿:

  • 開始用“定時器/軟中斷”挺好,不過隨著媳婦數(代碼塊)的增多,猝!
  • 後來折騰“事件驅動/狀態機”,就活在連跳/回調地獄裡,最終為個delay而累猝!
  • 最後“多線程”還行…還活著。

焦頭爛額,終於hold住。

可人生問題哪止這些,後來更大問題是3字:“沒錢”

“多線程”雖好,太費錢(資源消耗大)、太折騰(競爭成本高),很多場景受限:

  • 瀏覽器:沒有多線程
  • 嵌入式MCU:實時性要求高、RAM受限,甚至沒有RTOS
  • 大鍊接數server:微信後台
  • 遊戲:魔獸世界

吐血。

小品文已過,咱們言歸正傳。

1。

近些年,很多編程語言都修訂標準,新增2個關鍵字async/await:

  • 直接包含:C#/JavaScript/Rust/Dart
  • 其它語言(golang/erlang/lua…)沒直接包含,也提供類似機制,比如Go goroutine

原文鏈接:【https://www.infoq.cn/article/Etg9R8OYE0Bu7QA3MEPf】。未經作者許可,禁止轉載。