非同步模型筆記
Concurrency: 兩件以上的事情,同時被一個處理單位處理,以分時的方式。 ex: 處理A事情處理到一半,把 call stack 丟出去,載入 B stack 到暫存器中,以分時的方式處理。 Parallelism: 多個事件,被多個處理單位同時處理。 這兩種程式在開發的時候都非常困難,因為有 shared memory 的問題! Shares memory 會造成 1. Race condition 2. Dead lock 解決方式 1. functional programing - 每件事都是 immutable 2. Actor model - 把 mutable 的狀態封裝在物件內,只透過非同步的通訊方式交換訊息 Actor 1. 輕量化的物件,有自己內部可改變的 state,別人不可改,也不共享 2. 跑在自己的執行緒上面 3. 沒有 shared memory state 4. 別的 actor 來的訊息,會按照順序存在 mailbox 中,依序處理 5. 只能透過訊息改變其他 actor 6. 程式變得更可擴展,因為更輕量且每個 call stack 都很小 CSP Model Actor vs CSP 相同: 1. 不同的執行單元是透過傳 message 的方式溝通 2. 他們自己內部都有 private state,所以不需要 lock 3. 他們不是用共享記憶體的方式通訊,而是通訊來達到共享記憶體 不同: 1. CSP 不關注 Process 本身,所以 CPS 的 processes are anonymous,然而每個 Actor 都會有自己的身份 2. Actor 都是用非同步的方式傳送訊息,但是 CSP 則是同步,也就是 CSP 會 blocking Asynchronous model callbacks: 當相依的事件做完之後,會呼叫下一件要做的事情 會有 callback hell 的問題 promise => async/await: promise 底層其實也是透過 callback, 只是將 callback 封裝在內部, 搭配內部 state (fulfilled, pending, reject) 的管理,將 callback hell 的問題解決。 更詳細的解說請參考: https://zhu...