day26網路程式設計
1.1.1ThreadLocal
#很類似於類中的呼叫私有方法
全域性變數local_school就是一個ThreadLocal物件,每個Thread對它都可以讀寫student屬性,但互不影響。你可以把local_school看成全域性變數,但每個屬性如local_school.student都是執行緒的區域性變數,可以任意讀寫而互不干擾,也不用管理鎖的問題,ThreadLocal內部會處理。
1.1.2非同步
1.1.3 GIL
在python的原始直譯器CPython中存在著GIL(Global Interpreter Lock,全域性直譯器鎖),因此在解釋執行python程式碼時,會產生互斥鎖來限制執行緒對共享資源的訪問,直到直譯器遇到I/O操作或者操作次數達到一定數目時才會釋放GIL。所以,雖然CPython的執行緒庫直接封裝了系統的原生執行緒,但CPython整體作為一個程式,同一時間只會有一個獲得GIL的執行緒在跑,其他執行緒則處於等待狀態。這就造成了即使在多核CPU中,多執行緒也只是做著分時切換而已。 不過muiltprocessing的出現,已經可以讓多程式的python程式碼編寫簡化到了類似多執行緒的程度了。
推薦網站:
http://developer.51cto.com/art/200910/156804.htm
解決GIL:
1、能用程式不用執行緒。
2、高效的程式碼使用c,c++來編寫
說明:
單核的cup一個死迴圈執行緒或者程式,會佔滿這個cpu
雙核的cpu兩個死迴圈執行緒,佔據兩個cpu都在50%左右,並不會佔滿,這樣降低了執行效率。
雙核的cpu兩個死迴圈程式,佔滿兩個cpu的100%一個程式一個cpu,執行緒在程式裡面,程式裡面 可以有多個執行緒。
網路程式設計
UDP
·使用網路能夠把多方連結在一起,然後可以進行資料傳遞
·所謂的網路程式設計就是,讓在不同的電腦上的軟體能夠進行資料傳遞,即程式之間的通訊
UDP可以隨時傳送,沒有接收者也可以傳送。
1、tcp/ip簡介
作為新時代標杆的我們,已經離不開手機、離不開網路,對於網際網路大家可能耳熟能詳,但是計算機網路的出現比網際網路要早很多
2、TCP/IP協議(族)
早期的計算機網路,都是由各廠商自己規定一套協議,IBM、Apple和Microsoft都有各自的網路協議,互不相容
為了把全世界的所有不同型別的計算機都連線起來,就必須規定一套全球通用的協議,為了實現網際網路這個目標,網際網路協議簇(Internet Protocol Suite)就是通用協議標準。
因為網際網路協議包含了上百種協議標準,但是最重要的兩個協議是TCP和IP協議,所以,大家把網際網路的協議簡稱TCP/IP協議
說明:
網際層也稱為:網路層
網路介面層也稱為:鏈路層
3、埠
如果一個程式需要收發網路資料,那麼就需要有這樣的埠
在linux系統中,埠可以有65536(2的16次方)個之多!
4、埠號
埠是通過埠號來標記的,埠號只有整數,範圍是從0到65535
埠號不是隨意使用的,而是按照一定的規定進行分配。
5、知名埠(Well Known Ports)
知名埠是眾所周知的埠號,範圍從0到1023, 系統已經佔用的埠號
eg:
80埠分配給HTTP服務
21埠分配給FTP服務
6、動態埠(Dynamic Ports)
動態埠的範圍是 從1024到65535
之所以稱為動態埠,是因為它一般不固定分配某種服務,而是動態分配。
動態分配是指當一個系統程式或應用程式程式需要網路通訊時,它向主機申請一個埠,主機從可用的埠號中分配一個供它使用。
當這個程式關閉時,同時也就釋放了所佔用的埠號。
7、怎樣檢視埠 ?
用“netstat-ano” “ps -aux”檢視埠狀態
8、小總結
埠有什麼用呢 ? 我們知道,一臺擁有IP地址的主機可以提供許多服務,比如HTTP(全球資訊網服務)、FTP(檔案傳輸)、SMTP(電子郵件)等,這些服務完全可以通過1個IP地址來實現。那麼,主機是怎樣區分不同的網路服務呢?顯然不能只靠IP地址,因為IP地址與網路服務的關係是一對多的關係。實際上是通過“IP地址+埠號”來區分不同的服務的。 需要注意的是,埠並不是一一對應的。比如你的電腦作為客戶機訪問一臺WWW伺服器時,WWW伺服器使用“80”埠與你的電腦通訊,但你的電腦則可能使用“3457”這樣的埠。
9、ip地址
1.什麼是地址
ip地址:用來在網路中標記一臺電腦的一串數字,比如192.168.1.1;在本地區域網上是唯一的。
2.ip地址的分類
每一個IP地址包括兩部分:網路地址和主機地址
1.1.1socket簡介 (套接字)
1、網路中程式之間如何通訊
首要解決的問題是如何唯一標識一個程式,否則通訊無從談起!
在本地可以通過程式PID來唯一標識一個程式,但是在網路中這是行不通的。
其實TCP/IP協議族已經幫我們解決了這個問題,網路層的“ip地址”可以唯一標識網路中的主機,
而傳輸層的“協議+埠”可以唯一標識主機中的應用程式(程式)。
這樣利用ip地址,協議,埠就可以標識網路的程式了,網路中的程式通訊就可以利用這個標誌與其它程式進行互動
3.什麼是socket
socket(簡稱套接字)是程式間通訊的一種方式,它與其他程式間通訊的一個主要不同是:
它能實現不同主機間的程式間通訊,我們網路上各種各樣的服務大多都是基於Socket來完成通訊的
例如我們每天瀏覽網頁、QQ聊天、收發email等等
4.建立socket
在Python中 使用socket模組的函式socket就可以完成:
socket.socket(AddressFamily, Type) 一般只用到這兩個引數。
說明:
函式socket.socket建立一個socket,返回該socket的描述符,該函式帶有兩個引數:
·Address Family:可以選擇AF_INET(用於Internet程式間通訊) 或者AF_UNIX(用於同一臺機器程式間通訊),實際工作中常用AF_INET
·Type:套接字型別,可以是SOCK_STREAM(流式套接字,主要用於TCP協議)或者SOCK_DGRAM(資料包套接字,主要用於UDP協議)
建立一個tcp socket(tcp套接字)
udp既可以當做傳送,又可以當做接受,還可以設定埠號,由傳送者設定。
格式:物件.bind(assress,埠號)
相關文章
- 網路通訊程式設計程式設計
- 網路協程程式設計程式設計
- Socket 程式設計 (網路篇)程式設計
- py網路工具程式設計程式設計
- Python網路Socket程式設計Python程式設計
- python 網路篇(網路程式設計)Python程式設計
- 網路程式設計-計算機網路三要素程式設計計算機網路
- linux c網路網路程式設計面試題收集Linux程式設計面試題
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Java的網路功能與程式設計 一 (轉)Java程式設計
- Java中神經網路Triton GPU程式設計Java神經網路GPU程式設計
- 程式設計路漫漫程式設計
- 設計卷積神經網路CNN為什麼不是程式設計?卷積神經網路CNN程式設計
- 【go網路程式設計】-HTTP程式設計Go程式設計HTTP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- day26打卡
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- C語言Socket程式設計(計算機網路作業)C語言程式設計計算機網路
- 我來談談網路設計,程式設計,網管設計三者群體的差異 (轉)程式設計
- 網路安全程式設計 windowns防火牆培訓程式設計防火牆
- 關於程式設計師寫文件(網路轉載)程式設計師
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- 程式設計和網路程式設計入門程式設計
- 網路程式設計程式設計
- 【Linux網路程式設計】網路程式設計常見概念Linux程式設計
- 網頁設計師 vs 網頁程式設計師網頁程式設計師
- 不會程式設計?來用Excel抓取網路資料程式設計Excel
- 程式設計師之間的十八層鄙視網路程式設計師
- 網路遊戲程式設計師須知 UDP vs TCP(轉)遊戲程式設計師UDPTCP
- 另類網路層設計
- 網路規劃與設計
- 【網路程式設計】阻塞IO程式設計的坑程式設計
- Java 網路程式設計 —— 非阻塞式程式設計Java程式設計
- 計算機網路 課程設計計算機網路
- 一個老程式設計師在網際網路寒冬下的感悟程式設計師
- 程式設計師跳槽月,網際網路公司求職推薦書單程式設計師求職
- Linux網路程式設計--初等網路函式介紹(TCP)(轉)Linux程式設計函式TCP