關於同步,異步一些事

前言

其實,同步,異步的知識點,我是知道的,可是其中同步還分同步阻塞,同步非阻塞,異步阻塞,異步非阻塞這裏面我有些卻瞭解的卻不是很清楚,最近跟朋友討論這塊,才發現,盲點很多,藉此,想寫下這篇,記錄下學習跟理解的過程,所以,咱們須要先知道,什麼是 同步異步,什麼是 阻塞非阻塞異步

同步,異步概念

同步: 在發起一個調用的時候,沒有拿過結果以前,調用不會返回
異步: 在發起一個調用的時候,不須要等待拿到結果,調用直接返回,經過回調函數返回結果函數

從上面咱們大概能理解了什麼是同步異步了,可是解釋的不算接地氣,咱們打算舉個更接地氣的例子學習

同步

咱們在食堂打飯,刷了飯卡後(發起一個調用),在沒等到食堂阿姨給咱們飯菜的時候,咱們是不能走的,由於咱們刷了飯卡,扣了錢了,須要給我飯菜,我才能走,因此,在食堂打飯這就是同步調用線程

異步

咱們不在食堂吃飯,咱們在外面的飯店吃飯,在收銀員那點餐付款(發起一個調用)後,收銀員會給咱們一個牌子,咱們找個位置坐下來,後面會有服務員經過牌子找到咱們,把飯菜端上來給咱們(異步回調),由於咱們已經付款了,而且給了牌子,後面服務員能夠經過牌子找到咱們,我不須要一直在收銀員那等着告訴我結果,能夠直接找位置坐下來,因此在飯店吃飯是異步code

阻塞,非阻塞概念

阻塞: 阻塞,是指調用結果返回以前,當前線程會被阻塞,調用結果返回後,當前線程纔會返回 非阻塞: 非阻塞,在不能立刻獲得調用結果以前,當前線程不會被阻塞回調函數

在上面,咱們大概能理解了,什麼是阻塞非阻塞,可是解釋的不算接地氣,咱們打算舉個更接地氣的例子同步

阻塞

你打電話給小區內的一家飯店,想問問有沒有西紅柿雞蛋蓋飯,老闆告訴你,要去廚房看一下,有沒有西紅柿跟雞蛋了,若是你是阻塞調用,那麼你就要在電話旁邊一直等着,直到獲得是否有西紅柿雞蛋蓋飯這個結果,你一直等着結果,就是阻塞效率

非阻塞

仍是一樣的故事,你打電話給小區內飯店老闆,若是你是非阻塞調用,那麼你能夠把手機開擴音,放旁邊,能夠玩其餘的,偶爾你也要關注飯店老闆反饋給你的信息,看看有沒有西紅柿跟雞蛋,在等結果的同時,你還能玩其餘的,就是非阻塞總結

同步,異步,阻塞,非阻塞之間的差別

在上面,咱們介紹了關於 同步,異步,阻塞,非阻塞,同時咱們發現 同步阻塞,異步非阻塞的定義好像很像,可是實際上,他們不是一個東西,同步異步關注的是消息通訊阻塞非阻塞關注的是線程在等待調用結果時的狀態,二者關注的點不同,所以,咱們不要混淆了概念通信

同步,阻塞的區別

我總結一下,同步 阻塞 的差別跟關注點

同步: 調用方,主動等待結果的返回 阻塞: 線程,在結果沒有返回的時候,會被阻塞,只要有等結果返回以後才運行,換言之,就是線程處於阻塞狀態

異步,非阻塞的區別

我總結一下 異步 非阻塞 的差別跟關注點

異步: 調用方,不須要等待調用結果的返回,在調用發出後,就返回了,沒有結果,須要經過回調函數來返回結果 非阻塞: 線程,在結果沒有返回的時候,處於運行狀態,線程能夠去作其餘的

總結

舉個例子,來描述下上述總結的內容

出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)

  1. 老張把水壺放到火上,等待水開(同步阻塞)
  2. 老張把水壺放到火上,而後去客廳看電視,而且時不時的去廚房看看水有沒有燒開(同步非阻塞)
  3. 老張把響水壺放到火上,等待水開(異步阻塞)
  4. 老張把響水壺放到火上,而後去客廳看電視,水壺響以前,不會去廚房看水有沒有燒開,等水壺響了再去看(異步非阻塞)

老張以爲本身聰明瞭。"所謂同步異步,只是對於水壺而言"。

  1. 普通水壺,同步;
  2. 響水壺,異步.

雖然都能幹活,但響水壺能夠在本身完工以後,提示老張水開了。這是普通水壺所不能及的。同步只能讓調用者去輪詢本身(狀況2中),形成老張效率的低下.

所謂阻塞非阻塞,"僅僅對於老張而言"。

  1. 等待水開的老張,阻塞.
  2. 看電視的老張,非阻塞.

狀況1和狀況3中老張就是阻塞的,由於在等待水開的過程當中,他不能作其餘的。雖然3中響水壺是異步的,可對於等待水開的老張沒有太大的意義。因此通常異步是配合非阻塞使用的,這樣才能發揮異步的效用

從上面的例子,咱們應該能理解了關於同步 異步 阻塞 非阻塞的概念了,同步/異步是對用獲取水開的方式不一樣,阻塞/非阻塞是對於等待水開的過程當中,可否去作其它事情,所以我總結了一下前言提到的 同步阻塞,同步非阻塞,異步阻塞,異步非阻塞

  1. 同步阻塞: 發起調用,得不到結果就等待,而且阻塞當前線程,不能作其餘的
  2. 同步非阻塞: 發起調用,得不到結果就等待,當前線程不會被阻塞,依舊會處於運行狀態,能夠去作其餘的
  3. 異步阻塞: 發起調用,不等待結果返回,可是當前線程會被阻塞,不能作其餘的
  4. 異步非阻塞: 發起調用,不等待結果返回,當前線程能夠作其餘的
相關文章
相關標籤/搜索