IO在計算機中指Input/Output,也就是輸入和輸出編程
因爲程序在運行時,數據是駐留在內存中並由CPU這個超快的計算核心來執行,涉及到數據交換的地方,一般須要磁盤讀寫、網絡傳輸等,這樣就須要IO接口
IO編程中,有一個很重要的概念叫Stream(流),可想象其是一個水管,數據就是水管裏的水,但只能單向流動
Input Stream就是數據從外面(磁盤、網絡)流進內存,Output Stream就是數據從內存流到外面去
對於瀏覽網頁來講,瀏覽器和新浪服務器之間至少須要創建兩根水管,纔可既能發數據,又能收數據
因爲CPU和內存的速度遠遠高於外設的速度,所以會存在嚴重的速度不匹配問題
例如,要把100M的數據寫入磁盤,CPU輸出100M的數據只須要0.01秒,但是磁盤要接收這100M數據可能須要10秒,對此有兩種辦法:
1) 同步IO,就是讓CPU等待,即程序暫停執行後續代碼,等100M的數據在10秒後寫入磁盤,再接着往下執行
2) 異步IO,就是不讓CPU等待,即程序繼續執行後續代碼,至於100M的數據讓其慢慢往磁盤寫
異步IO的性能遠遠高於同步IO,可是複雜程度也遠遠高於同步IO
異步IO主要有如下兩種模式:
回調模式:啓動類啓動線程類後,線程類執行結束後會直接調用回調方法,表示線程執行結束,啓動類不須要不斷的確認線程是否結束
輪詢模式:啓動類啓動線程類後,線程類執行結束後不會調用回調方法,所以啓動類須要不斷監聽線程類是否結束(如經過循環)
操做IO的能力都是由操做系統提供的,每一種編程語言(包括Python)都會把操做系統提供的低級C接口封裝起來方便使用瀏覽器