socket網絡編程中的同步,異步,阻塞式,非阻塞式,有何聯繫與區別?

1、舉個打電話的例子: html

  阻塞   block   是指,你撥通某人的電話,可是此人不在,因而你拿着電話等他回來,其間不能再用電話。同步大概和阻塞差很少。 異步

  非阻塞   nonblock   是指,你撥通某人的電話,可是此人不在,因而你掛斷電話,待會兒再打。至於到時候他回來沒有,只有打了電話才知道。即所謂的「輪詢   /   poll」。 ui

  異步是指,你撥通某人的電話,可是此人不在,因而你叫接電話的人告訴那人(leave   a   message),回來後給你打電話(call   back)。 .net

2、同步異步與阻塞和非阻塞是兩種不一樣的概念來着 htm

  同步異步指的是通訊模式,而阻塞和非阻塞指的是在接收和發送時是否等待動做完成才返回 blog

  首先是通訊的同步,主要是指客戶端在發送請求後,必須得在服務端有迴應後才發送下一個請求。因此這個時候的全部請求將會在服務端獲得同步 隊列

  其次是通訊的異步,指客戶端在發送請求後,沒必要等待服務端的迴應就能夠發送下一個請求,這樣對於全部的請求動做來講將會在服務端獲得異步,這條請求的鏈路就象是一個請求隊列,全部的動做在這裏不會獲得同步的。 文檔

    阻塞和非阻塞只是應用在請求的讀取和發送。 get

在實現過程當中,若是服務端是異步的話,客戶端也是異步的話,通訊效率會很高,但若是服務端在請求的返回時也是返回給請求的鏈路時,客戶端是能夠同步的,這種狀況下,服務端是兼容同步和異步的。相反,若是客戶端是異步而服務端是同步的也不會有問題,只是處理效率低了些。同步

參考文檔:http://blog.csdn.net/hguisu/article/details/7453390

http://www.cnblogs.com/zhangchaoyang/articles/2617188.html

相關文章
相關標籤/搜索