並發系列64章(並發概要)第一章
- 2020 年 4 月 2 日
- 筆記
前言
初學並發的時候一想到並發,然後就和多執行緒對等了。這就有一丟丟狹隘了,比如說node是單執行緒,但是人家可以高並發。說明並發並不是一個簡單的多執行緒問題。
同樣很多人說硬體cpu的發展為並發提供基礎,在這裡也可以看出是其實是為多執行緒提供基礎,為並發提供發展道路。
並發的優點在作業系統單核的時候就體現了,最好的體現就是作業系統中執行緒的調度。而我們能做哪種並發,取決於作業系統能做哪種並發,沒有人會以為自己寫的程式真的能創建執行緒。
下面是個人的一些使用過得並發路子,由於接觸有限只是用下面4種。
正文
1.多執行緒
採用多個執行緒來執行程式。在此指狹隘的多執行緒概念,比如說一個程式,執行不同類型的任務採用不同的執行緒,這些執行緒一直伴隨著程式的生命周期。
2.並行處理
是多執行緒中的一種。把正在執行的大量任務分割成小塊,分配給多個同時運行的程式。
下面是百度百科的概念:
並行處理(Parallel Processing)是電腦系統中能同時執行兩個或多個處理的一種計算方法。並行處理可同時工作於同一程式的不同方面。並行處理的主要目的是節省大型和複雜問題的解決時間。 為使用並行處理,首先需要對程式進行並行化處理,也就是說將工作各部分分配到不同處理進程(執行緒)中。並行處理由於存在相互關聯的問題,因此不能自動實現。另外,並行也不能保證加速。從理論上講,在 n 個並行處理的執行速度可能會是在單一處理機上執行的速度的 n 倍。
狹隘的多執行緒解決不同類型的任何互不干預。而並行處理則是從任務的角度分割,切換成小而完整的任務,利用多執行緒去實行並行處理。
之所以會有這種模式,是因為我們會有大的任務,這會影響其他任務的執行,不可能把蘋果都放在一個籃子裡面。
3.非同步編程
它採用future模式或者回調模式機制,以避免產生不必要的執行緒。
為什麼會產生這種概念呢?是因為比如A執行緒,要等待B執行緒的結果才能繼續運行,這就有很大的問題了。
一個執行緒運行到一半去請求B的數據,尷尬不?這不符合多執行緒的理想情況,理想情況是不干預啊。
以人的思維來說,一件事情A做到一半,要等待另外一件事情B完成。萬一B干到一半出事了呢?那麼A是不是尷尬了?
這樣一想是不是一個尷尬的問題?對電腦來說,就更是了。
舉一個例子:
我們知道js調用瀏覽器的api來實現對後台的訪問的,我們打開一個網頁一下子會請求很多數據,但是呢,即使網頁載入到一半的時候我們可以操作網頁,比如我們的點擊操作,這一部分會調用js程式碼。
而且我們知道js是單線的,也就是說js掉完瀏覽器的api之後,並沒有阻塞我們的js這條單線。但是當伺服器返回的時候我們的頁面又有數據了。這是因為瀏覽器當結果返回的時候,會調用我們的js方法。
這個js方法就是未來任務,也就是feature。
當然每個人的理解是不同的,如果有誤望請指出。
響應式編程
百度百科上:
響應式編程是一種面向數據流和變化傳播的編程範式。這意味著可以在程式語言中很方便地表達靜態或動態的數據流,而相關的計算模型會自動將變化的值通過數據流進行傳播。
說的非常籠統,這意味著什麼呢?意味著這東西還沒有具體化,概念還未具體化,沒有實現其普遍性的價值。涉及到數據流的問題,在此就不好解釋,後續慢慢展開。
總結
那麼一個程式是如何運用這四種模式呢?
1.多執行緒:
2.並行處理
3.非同步編程
4.響應式編程
數據驅動。