淺談程式設計中的執行緒、程序、分散式系統
-
單執行緒與多執行緒的比較:
單執行緒就是我們學習程式設計時最開始接觸的,比如寫一個"hello world"。而在多執行緒中,其共享code、data、files,同時,它們有各自的registers和stack。
簡單地說,多執行緒有如下的複雜性特點:
1、對資源、資料的安全性:鎖保護
2、原子性:資料操作是天然互斥的
3、同步等待:如wait()、notify()、notifyAll()
4、死鎖:多個執行緒對資源互鎖,造成死鎖
5、容災:任何執行緒出現錯誤,整個程序都會停止
但多執行緒也有如下優勢:
1、記憶體空間共享,資訊資料互動效率高
2、提高CPU的使用效率
3、開發便捷
4、輕量級,建立、銷燬的開銷小
-
執行緒與程序的比較
看到一段用英文描述的程序與執行緒之間的比較,感覺還不錯
大概的意思是:
1、程序是重量級的,執行緒是輕量級的
2、程序是資源分配和保護的單元,執行緒是CPU使用的單元
3、程序的建立在資源專案是消耗較大的,執行緒建立是消耗較小的
4、程式作為程序執行相對執行緒慢,而執行緒相比程序而言快
5、一個程序不能使用其它程序所屬的記憶體空間,執行緒可以共享其所屬同一程序裡面其它執行緒的記憶體空間
6、程序轉換是消耗較多時間的,執行緒轉換比較快
7、一個程序可以包含許多執行緒,一個執行緒屬於一個確定的程序
-
程序間通訊的方式
1、管道(PIPE)
2、訊號(SIGNAL)
3、訊息佇列:Posix以及system V,現在用得較多的MQ,在不同程式間通過釋出訂閱、廣播、主題等方式進行訊息傳遞,主要有離線和線上。一般線上是在大規模叢集上執行的,所以一般需要用錢買服務,騰訊雲和阿里雲等有提供這種訊息佇列的服務。而離線一般在小規模或單機上實現不同程式之間的訊息傳遞,一些比較成熟的開源庫有RabbitMQ,ActiveMQ,Kafka,Redis等。後面有時間再專門探討一下訊息佇列。
4、共享記憶體:速度最快,需要結合訊號量達到程序間的同步和互斥
5、訊號量:用於資料同步
6、Socket:可以標準化,可以用於多機
-
分散式系統
在學習分散式系統之間,首先我們要對程式設計中的思想與步驟進行充分了解,其是一個過程:
從我們寫的程式程式碼(program)