同步:發出一個功能調用時,在沒有獲得結果以前,該調用就不會返回,原地等待多線程
異步:相反,不須要等待異步
阻塞:調用結果返回以前,當前線程會被掛起,如io操做,只有在獲得返回結果以後,纔會將阻塞的線程激活和同步不同,不要混淆,同步雖然也在原地等待,可是它的線程仍是激活的。socket
非阻塞 相反函數
阻塞IO:socket默認是阻塞的線程
解決方案:使用多線程或多進程,可是問題是若是鏈接數太多,會嚴重佔用計算機資源使用線程池或進程池,只是必定程度上緩解了,可是池子始終有上限。。。因此仍是用非阻塞吧。server
非阻塞IO:用戶進程實際上是須要不斷的主動詢問kernel數據準備好了沒有。進程
server.setblocking(False)事件
弊端:循環調用recv()將大幅度cpu佔用率。檢測操做是否完成,毫不被推薦資源
多路複用IO:事件驅動模型
select 代替咱們去詢問,至關於中介處理的鏈接數不是很高,還不如以前的,可是若是鏈接數很是大,效果顯而易見的。同步