網絡通信:網際網路通信使用,目的讓電腦上不同軟體之間通信。
IP位址:分為IP4與IP6

IP位址分類:電腦唯一區分号
端口号:同一個Ip下的不同程式的識别
程序:運作的程式就叫做程序,知名端口0---1023,動态端口1024--65535。其中網站浏覽預設端口80,ftp端口21
socket套接字:用來完成網絡通信必備的東西。
通信模型:UDP與TCP,udp可以了解成寫信模式,每封信都需要位址端口等,另外存在不安全性,資料可能丢失。TCP可以了解為打電話的形式,相對就安全很多。TCP還具有逾時重傳,錯誤校驗,流量控制和阻塞管理。
下載下傳檔案
時間片輪轉:單核cpu處理多個應用程式,每個程式配置設定極少的時間如0.001s,輪換切換時間極短,人工難以區分,就誤以為一起同時運作了。這裡隻是完成多任務的一種政策。例子:單核CUP運作QQ,切換微信等
并行:真正的多任務,每個程式一個核心cpu。例如:雙核CPU分别運作QQ與微信
并發:假的多任務,cup核數量少于任務數。例如:單核CPU運作QQ與微信
紅色箭頭表示程式的線程,調用start方法時候,生成新的線程。這時候可以有兩個線程同時執行代碼,由此出現多任務的情況。
線程的封裝
全局變量:如果指定固定值不加global,如果指的同一個位址不需要加
線程傳參
互斥鎖
死鎖:銀行家算法
死鎖是一種狀态,在多任務中A任務在等待。B任務也在等待,。。。,N任務也在等待。就造成一種死鎖現象。都在等待解鎖,就造成阻塞,程式永遠卡住。為了避免死鎖出現以下政策:
(1) 添加逾時時間
(2)程式設計時要盡量避免(例如,銀行家算法)等
銀行家算法核心思想就是将現有的資源配置設定給多個任務,任務執行完解鎖,以此類推完成所有任務。
exe就是二進制檔案,就是一個靜态的程式。将這個程式運作起來就是程序了。程式隻有一個,但是可以包含多個程序,一個程序可以包含多個線程。最簡單的了解,比如微信是一個程式,運作起來以後會使用語音、視訊、網絡、聲霸卡等功能,每個功能是一個程序。這樣看起來程式運作起來就包含多個程序了。程序是作業系統配置設定的機關。
程序的狀态
程序也可以完成多任務,不過占用資源比較大。線程可以完成多任務,占用資源少。
程序和線程對比
程序是一堆資源的繼承,包括網絡,硬碟,聲霸卡等。程序是資源配置設定機關。一個程序裡面至少一個主線程。程序可以了解為工廠上面的流水線,線程就是流水線上的勞工。
線程比較輕量級。線程執行開銷小,不利于資源管理和保護。程序相反。
程序間的通信Queue:放資料put,取資料get,判空empty,判滿full
程序通信案例,其中一個程序是網上下載下傳資料,一個程序是分析資料。如果是線程可以通過全局變量共享資料。如果是程序需要引入通信queue的get和put讀寫資料達到共享。
程序池pool:對程序管理,join阻塞主程序,等待程序池裡面程序執行。程序池中如果有異常是不會在螢幕上列印的
range與xrange的差別,前者基于疊代器傳回的結果,占用大量空間;後者傳回可以疊代對象,什麼時候用什麼時候取。Python3經過改進後,将range改進近似xrange節約空間
疊代器執行儲存的結果,疊代器生成代碼next控制結果,具備yield辨別有return的效果,而且運作速度快。
yield實作多任務
pip安裝到python2裡面,pip3安裝到python裡面
greenlet是對yield的高端封裝,可以直接寫greenlet不用再添加yeild。通過switch切換函數
gevent異步并發庫,其采用協程方式。(推薦使用,yield和greenlet了解即可)
gevent圖檔下載下傳案例
程序是資源配置設定機關,線程是作業系統排程機關
程序切換需要很大的資源,效率低;線程切換資源一般效率一般
協程切換任務資源很小,效率高
多程序多線程根據cpu核數不同可能是并發,但是協程在一個線程中是并發
作者:白甯超,工學碩士,現工作于四川省計算機研究院,研究方向是自然語言處理和機器學習。曾參與國家自然基金項目和四川省科技支撐計劃等多個省級項目。著有《自然語言處理理論與實戰》一書。 自然語言處理與機器學習技術交流群号:436303759 。
出處:http://www.cnblogs.com/baiboy/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。