同步非同步 阻塞非阻塞

2022-03-23 14:22:26 字數 2264 閱讀 8666

首先知道同步非同步與阻塞非阻塞不是乙個層次的概念

「阻塞」與"非阻塞"與"同步"與「非同步"不能簡單的從字面理解,提供乙個從分布式系統角度的回答。

同步和非同步關注的是訊息通訊機制(synchronous communication/ asynchronous communication)

所謂同步,就是在發出乙個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。

換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。

而非同步則是相反,*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當乙個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在*呼叫*發出後,*被呼叫者*通過狀態、通知來通知呼叫者,或通過**函式處理這個呼叫。

例1:

之前一直在寫jquery**的時候遇到ajax載入資料都需要考慮**執行順序問題。最近的專案用了到ajax同步。這個同步的意思是當js**載入到當前ajax的時候會把頁面裡所有的**停止載入,頁面出去假死狀態,當這個ajax執行完畢後才會繼續執行其他**頁面假死狀態解除,而非同步則這個ajax**執行中的時候其他**一樣可以執行。 

jquery的async:false,這個屬性 

預設是true:非同步,false:同步。

$.ajax({ 

type: "post", 

url: "path", 

cache:false, 

async:false, 

datatype: ($.browser.msie) ? "text" : "xml", 

success: function(xmlobj){ 

有了這個屬性可以相對的減少**執行書序問題,但是如果用的太多,頁面假死次數太多。這樣反而導致使用者體驗不佳~!

根據$.ajax()中 async 和success的官方的解釋

async預設的設定值為true,這種情況為非同步方式,就是說當ajax傳送請求後,在等待server端返回的這個過程中,前台會繼續 執行ajax塊後面的指令碼,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個執行緒,ajax塊發出請求後乙個執行緒 和ajax塊後面的指令碼(另乙個執行緒)例:

$.ajax({  

type:"post", 

url:"venue.aspx?act=init", 

datatype:"html", 

success:function(result){   //function1()

f1(); 

f2(); 

failure:function (result) {  

alert('failed');  

function2(); 

在上例中,當ajax塊發出請求後,他將停留function1(),等待server端的返回,但同時(在這個等待過程中),前台會去執行function2(),也就是說,在這個時候出現兩個執行緒,我們這裡暫且說為function1() 和function2()。

當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求後,他會等待在function1()這個地方,不會去執行function2(),知道function1()部分執行完畢

例2:

你打**問書店老闆有沒有《分布式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,」我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。

而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打**給你,然後直接掛**了(不返回結果)。然後查好了,他會主動打**給你。在這裡老闆通過「回電」這種方式來**。

阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態.

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。

非阻塞呼叫指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。

還是上面的例子,

你打**問書店老闆有沒有《分布式系統》這本書,你如果是阻塞式呼叫,你會一直把自己「掛起」,直到得到這本書有沒有的結果,如果是非阻塞式呼叫,你不管老闆有沒有告訴你,你自己先一邊去玩了, 當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。

在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。

阻塞,非阻塞,非同步,同步

之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...