有的說英語,有的說中文,有的說德語琴儿,說同一種語言的人可以交流段化,不同的語言之間就不行了
為了解決不同種族人之間的語言溝通障礙,現(xiàn)規(guī)定國際通用語言是英語造成,這就是一個規(guī)定显熏,這就是協(xié)議
計算機網(wǎng)絡(luò)溝通用什么
現(xiàn)在的生活中,不同的計算機只需要能夠聯(lián)網(wǎng)(有線無線都可以)那么就可以相互進行傳遞數(shù)據(jù)
那么不同種類之間的計算機到底是怎么進行數(shù)據(jù)傳遞的呢晒屎?
就像說不同語言的人溝通一樣喘蟆,只要有一種大家都認可都遵守的協(xié)議即可,那么這個計算機都遵守的網(wǎng)絡(luò)通信協(xié)議叫做TCP/IP協(xié)議
TCP/IP協(xié)議(族)
早期的計算機網(wǎng)絡(luò)鼓鲁,都是由各廠商自己規(guī)定一套協(xié)議蕴轨,IBM、Apple和Microsoft都有各自的網(wǎng)絡(luò)協(xié)議骇吭,互不兼容
為了把全世界的所有不同類型的計算機都連接起來橙弱,就必須規(guī)定一套全球通用的協(xié)議,為了實現(xiàn)互聯(lián)網(wǎng)這個目標(biāo)燥狰,互聯(lián)網(wǎng)協(xié)議簇(Internet Protocol Suite)就是通用協(xié)議標(biāo)準棘脐。
因為互聯(lián)網(wǎng)協(xié)議包含了上百種協(xié)議標(biāo)準,但是最重要的兩個協(xié)議是TCP和IP協(xié)議龙致,所以蛀缝,大家把互聯(lián)網(wǎng)的協(xié)議簡稱TCP/IP協(xié)議
什么是端口
端口就好一個房子的門,是出入這間房子的必經(jīng)之路目代。
如果一個進程需要收發(fā)網(wǎng)絡(luò)數(shù)據(jù)屈梁,那么就需要有這樣的端口
在linux系統(tǒng)中嗤练,端口可以有65536(2的16次方)個之多!
既然有這么多俘闯,操作系統(tǒng)為了統(tǒng)一管理潭苞,所以進行了編號,這就是端口號
端口號
端口是通過端口號來標(biāo)記的真朗,端口號只有整數(shù)此疹,范圍是從0到65535
端口是怎樣分配的
端口號不是隨意使用的,而是按照一定的規(guī)定進行分配遮婶。
端口的分類標(biāo)準有好幾種蝗碎,我們這里不做詳細講解,只介紹一下知名端口和動態(tài)端口
知名端口(Well Known Ports)
知名端口是眾所周知的端口號旗扑,范圍從0到1023
80端口分配給HTTP服務(wù)
21端口分配給FTP服務(wù)
可以理解為蹦骑,一些常用的功能使用的號碼是估計的,好比 電話號碼110臀防、10086眠菇、10010一樣
動態(tài)端口(Dynamic Ports)
動態(tài)端口的范圍是從1024到65535
之所以稱為動態(tài)端口,是因為它一般不固定分配某種服務(wù)袱衷,而是動態(tài)分配捎废。
動態(tài)分配是指當(dāng)一個系統(tǒng)進程或應(yīng)用程序進程需要網(wǎng)絡(luò)通信時,它向主機申請一個端口致燥,主機從可用的端口號中分配一個供它使用登疗。
當(dāng)這個進程關(guān)閉時,同時也就釋放了所占用的端口號嫌蚤。
怎樣查看端口 辐益?
用“netstat -an”查看端口狀態(tài)
協(xié)程
協(xié)程是python個中另外一種實現(xiàn)多任務(wù)的方式,只不過比線程更小占用更小執(zhí)行單元(理解為需要的資源)脱吱。 為啥說它是一個執(zhí)行單元智政,因為它自帶CPU上下文。這樣只要在合適的時機箱蝠, 我們可以把一個協(xié)程 切換到另一個協(xié)程女仰。 只要這個過程中保存或恢復(fù) CPU上下文那么程序還是可以運行的。
通俗的理解:在一個線程中的某個函數(shù)抡锈,可以在任何地方保存當(dāng)前函數(shù)的一些臨時變量等信息疾忍,然后切換到另外一個函數(shù)中執(zhí)行,注意不是通過調(diào)用函數(shù)的方式做到的床三,并且切換的次數(shù)以及什么時候再切換到原來的函數(shù)都由開發(fā)者自己確定
協(xié)程和線程差異
在實現(xiàn)多任務(wù)時, 線程切換從系統(tǒng)層面遠不止保存和恢復(fù) CPU上下文這么簡單一罩。 操作系統(tǒng)為了程序運行的高效性每個線程都有自己緩存Cache等等數(shù)據(jù),操作系統(tǒng)還會幫你做這些數(shù)據(jù)的恢復(fù)操作撇簿。 所以線程的切換非常耗性能聂渊。但是協(xié)程的切換只是單純的操作CPU的上下文差购,所以一秒鐘切換個上百萬次系統(tǒng)都抗的住。
簡單實現(xiàn)協(xié)程
importtimedefwork1():whileTrue:? ? ? ? print("----work1---")yieldtime.sleep(0.5)defwork2():whileTrue:? ? ? ? print("----work2---")yieldtime.sleep(0.5)defmain():w1 = work1()? ? w2 = work2()whileTrue:? ? ? ? next(w1)? ? ? ? next(w2)if__name__ =="__main__":? ? main()
進程是資源分配的單位
線程是操作系統(tǒng)調(diào)度的單位
進程切換需要的資源很最大汉嗽,效率很低
線程切換需要的資源一般欲逃,效率一般(當(dāng)然了在不考慮GIL的情況下)
協(xié)程切換任務(wù)資源很小,效率高
多進程饼暑、多線程根據(jù)cpu核數(shù)不一樣可能是并行的稳析,但是協(xié)程是在一個線程中 所以是并發(fā)