基本概念
1 同步和非同步
同步和非同步關注的是訊息通訊機制
所謂同步,就是在發出一個呼叫時,在沒有得到結果之前,該呼叫就不返回。就是由呼叫者主動等待這個呼叫的結果。
而非同步則是相反,呼叫在發出之後,這個呼叫就會立即返回,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在呼叫發出後,被呼叫者透過狀態、通知來通知呼叫者,或透過回撥函式處理這個呼叫。
舉個通俗的例子:
你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。
而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆透過“回電”這種方式來回撥。
2 阻塞和非阻塞
通常用來形容多執行緒之間的相互影響.比如一個執行緒佔用了臨界區資源,那麼其他所有需要這個資源的執行緒就必須在這個臨界區進行等待,導致執行緒掛起,這就是阻塞.
非阻塞與之相反,強調沒有一個執行緒可以妨礙其他執行緒執行,所有執行緒都會嘗試不斷地前向執行.
3 5.死鎖(Deadlock),飢餓(Starvation)和活鎖(Livelock)
死鎖,飢餓,活鎖都屬於多執行緒情況下的執行緒活躍性問題
死鎖是指兩個或兩個以上的程式在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。
此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程式稱為死鎖程式。
飢餓指的是某一個或者多個執行緒無法獲得所需要的資源,導致一直無法執行。
可能的情況包括
執行緒優先順序過低,高階的執行緒不斷搶佔它需要的資源
某執行緒長時間佔用關鍵資源不放
與死鎖相比,飢餓是可能在未來一段時間內解決的(比如高階執行緒完成任務,不再瘋狂的執行)
活鎖指的是執行緒都秉承著"謙讓"的原則,主動將資源釋放給他人使用,導致資源不斷在多個執行緒中跳動,沒有一個執行緒可以同時拿到所有的資源而正常執行.
作者:芥末無疆sss
連結:
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2816421/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- babel基本概念Babel
- mongodb 基本概念MongoDB
- OpenGL基本概念
- Spring 基本概念Spring
- Kafka基本概念Kafka
- PMP基本概念
- 2.1 基本概念
- RocketMQ基本概念MQ
- Mysql基本概念MySql
- mobx基本概念
- JMS基本概念
- javascript:基本概念JavaScript
- 樹的基本概念
- lipaper-基本概念
- 微服務基本概念微服務
- RabbitMQ(1)---基本概念MQ
- 圖的基本概念
- GacUI基本概念(一)UI
- 01-基本概念
- redux的基本概念Redux
- Docker的基本概念Docker
- influxdb的基本概念UX
- TCP/IP 基本概念 (二)TCP
- Apache Kafka 的基本概念ApacheKafka
- 演算法基本概念演算法
- RocketMQ-基本概念(一)MQ
- 執行緒基本概念執行緒
- eth2.0基本概念
- Serverless 基本概念入門Server
- RocketMQ系列(一)基本概念MQ
- Browser Security-基本概念
- 程式的基本概念-上
- Kubernetes基本概念之Label
- C語言之基本概念C語言
- 資料分析基本概念
- Ability的基本概念(1)
- Ability的基本概念(2)
- Java —— 流的基本概念Java