日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

笔记1:网络编程

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 笔记1:网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡易理解網絡編程

1 相關概念認識

  • 網絡通信:萬維網通信使用,目的讓電腦上不同軟件之間通信。
  • IP地址:分為IP4與IP6

  • IP地址分類:電腦唯一區分號

  • 端口號:同一個Ip下的不同程序的識別

  • 進程:運行的程序就叫做進程,知名端口0---1023,動態端口1024--65535。其中網站瀏覽默認端口80,ftp端口21
  • socket套接字:用來完成網絡通信必備的東西。
xxxxxxxxxx # !/usr/bin/env python # coding:utf-8 ? import socket def handle_request(client): ? buf = client.recv(1024) ? client.send("HTTP/1.1 200 OK\r\n\r\n") ? client.send("Hello, World") def main(): ? # 創建socket對象,socket.AF_INET表示IP4, socket.SOCK_STREAM表示TCP通信 ? sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ? sock.bind(('localhost',8080))# 綁定端口和ip,本機ip,與客戶端相同的端口號 ? sock.listen(5) # 最大連接數 ? ? while True: ? ? ? connection, address = sock.accept() ? ? ? handle_request(connection) ? ? ? connection.close() if __name__ == '__main__': main()

?

  • 通信模型:UDP與TCP,udp可以理解成寫信模式,每封信都需要地址端口等,另外存在不安全性,數據可能丟失。TCP可以理解為打電話的形式,相對就安全很多。TCP還具有超時重傳,錯誤校驗,流量控制和阻塞管理。
  • 下載文件

2 進程、線程與協程

2.1 多任務

xxxxxxxxxx ''' 多任務操作:我們希望兩個線程同時執行 ''' ? import time import threading ? ? # 唱歌 def sing(): ? for i in range(5): ? ? ? print('正在唱歌===========>.......光輝歲月') ? ? ? time.sleep(1) ? ? # 跳舞 def dance(): ? for i in range(5): ? ? ? print('正在跳舞===========>.......新疆舞') ? ? ? time.sleep(1) ? ? #---------------------------------非多線程操作----------------------------- def main1(): ? sing() ? dance() ? ? #---------------------------------線程:多任務操作----------------------------- def main2(): ? t1 = threading.Thread(target=sing) ? t2 = threading.Thread(target=dance) ? t1.start() ? t2.start() ? ? if __name__ == '__main__': ? # main1() ? main2()
  • 時間片輪轉:單核cpu處理多個應用程序,每個程序分配極少的時間如0.001s,輪換切換時間極短,人工難以區分,就誤以為一起同時運行了。這里只是完成多任務的一種策略。例子:單核CUP運行QQ,切換微信等
  • 并行:真正的多任務,每個程序一個內核cpu。例如:雙核CPU分別運行QQ與微信
  • 并發:假的多任務,cup核數量少于任務數。例如:單核CPU運行QQ與微信

2.2 線程

  • 紅色箭頭表示程序的線程,調用start方法時候,生成新的線程。這時候可以有兩個線程同時執行代碼,由此出現多任務的情況。

線程的封裝

  • 全局變量:如果指定固定值不加global,如果指的同一個地址不需要加

  • 線程傳參

  • 互斥鎖

?

  • 死鎖:銀行家算法

死鎖是一種狀態,在多任務中A任務在等待。B任務也在等待,。。。,N任務也在等待。就造成一種死鎖現象。都在等待解鎖,就造成阻塞,程序永遠卡住。為了避免死鎖出現以下策略:

(1) 添加超時時間

(2)程序設計時要盡量避免(例如,銀行家算法)等

銀行家算法核心思想就是將現有的資源分配給多個任務,任務執行完解鎖,以此類推完成所有任務。

2.3 進程

  • exe就是二進制文件,就是一個靜態的程序。將這個程序運行起來就是進程了。程序只有一個,但是可以包含多個進程,一個進程可以包含多個線程。最簡單的理解,比如微信是一個程序,運行起來以后會使用語音、視頻、網絡、聲卡等功能,每個功能是一個進程。這樣看起來程序運行起來就包含多個進程了。進程是操作系統分配的單位。
  • 進程的狀態

進程也可以完成多任務,不過占用資源比較大。線程可以完成多任務,占用資源少。

  • 進程和線程對比

    • 進程是一堆資源的繼承,包括網絡,硬盤,聲卡等。進程是資源分配單位。一個進程里面至少一個主線程。進程可以理解為工廠上面的流水線,線程就是流水線上的工人。
    • 線程比較輕量級。線程執行開銷小,不利于資源管理和保護。進程相反。
  • 進程間的通信Queue:放數據put,取數據get,判空empty,判滿full

?

?

  • 進程通信案例,其中一個進程是網上下載數據,一個進程是分析數據。如果是線程可以通過全局變量共享數據。如果是進程需要引入通信queue的get和put讀寫數據達到共享。

  • 進程池pool:對進程管理,join阻塞主進程,等待進程池里面進程執行。進程池中如果有異常是不會在屏幕上打印的

2.4 協程

  • range與xrange的區別,前者基于迭代器返回的結果,占用大量空間;后者返回可以迭代對象,什么時候用什么時候取。Python3經過改進后,將range改進近似xrange節約空間

  • 迭代器執行保存的結果,迭代器生成代碼next控制結果,具備yield標識有return的效果,而且運行速度快。

  • yield實現多任務

  • pip安裝到python2里面,pip3安裝到python里面

  • greenlet是對yield的高端封裝,可以直接寫greenlet不用再添加yeild。通過switch切換函數

  • gevent異步并發庫,其采用協程方式。(推薦使用,yield和greenlet了解即可)

  • gevent圖片下載案例

2.5 進程、線程與協程的區別

  • 進程是資源分配單位,線程是操作系統調度單位
  • 進程切換需要很大的資源,效率低;線程切換資源一般效率一般
  • 協程切換任務資源很小,效率高
  • 多進程多線程根據cpu核數不同可能是并發,但是協程在一個線程中是并發

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/baiboy/p/11013089.html

總結

以上是生活随笔為你收集整理的笔记1:网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。