標籤:線程 block tps 複雜度 它的 效果 簡單 等於 strong
關於多線程和非同步相信不少人都有疑問,它們之間到底有什麼區別呢?
從知乎上看見一個比喻還是比較好理解的:
現在假設整個城市就只有1個火車,1個售票員,每個乘客諮詢售票員後需要思考1分鐘再決定買哪趟車的票。
非同步
在買票的人諮詢後,需要思考1分鐘,馬上靠邊站,但不用重新排隊,什麼時候想清楚可以立馬去跟售票員去買票。在該人站在旁邊思考的時候,後面的人趕緊上去接著買。這時候隊伍是很快的挪動的,沒有阻塞,售票員的最大化的效率。
多線程
火車站開n個視窗(但還是只有一個人售票),外面同時排n個隊,售票員回答諮詢者問題後,立馬馬上去下個視窗,然後繼續輪換到下個視窗.....哪個視窗的人決定好了,售票員立馬過去買給他。這個時候乘客比較簡單,但萬一那個隊伍有人思考半天糾結,後面的人就悲劇了。
搞清楚一個點
非同步呼叫並不是要減少線程的開銷,它的主要目的是讓調用方法的執行線程不需要同步等待在這個函數調用上,從而可以讓執行線程繼續執行它下面的代碼。與此同時, 系統會通過從ThreadPool中取一個線程來執行,協助我們將我們要寫/讀的資料發送到網卡.由於不需要我們等待, 我們等於同時做了兩件事情. 這個效果跟自己另外啟動一個線程來執行等待方式的寫操作是一樣的.但是, 非同步線程可以利用作業系統/.Net的線程池, 系統可以根據輸送量動態管理線程池的大小。
非同步、多線程調用本質
https://www.cnblogs.com/dream844/archive/2012/06/12/2546083.html
非同步IO操作
在.NET Framework 4.5+之後,微軟提供了 await \async\task,使得我們在非同步編程的時候可以像同步一樣的邏輯思考,屏蔽了.NET Framework 4.5之前進行非同步編程的複雜度(前期都是非同步委託實現)
http://www.cnblogs.com/liqingwen/p/5922573.html
非同步、多線程解惑