1. 程式人生 > >淺談程式設計中的執行緒、程序、分散式系統

淺談程式設計中的執行緒、程序、分散式系統

  • 單執行緒與多執行緒的比較:

        單執行緒就是我們學習程式設計時最開始接觸的,比如寫一個"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)