執行緒的介紹
- 介紹:多工除了使用程序,還可以使用執行緒
- 概念:執行緒是程序中執行程式碼的一個分支,每個執行分支要想工作執行程式碼需要cpu排程,也就是說執行緒是cpu的基本單位,每個程序至少有一個執行緒,而這個執行緒就是常說的主執行緒
執行緒的主要特性包括:
- 輕量級:相比程序,執行緒的建立和銷燬所需的資源更少,因此更輕量級。
- 共享記憶體:執行緒共享其所屬程序的地址空間和資源,如記憶體、檔案控制代碼等。
- 併發執行:多個執行緒可以在同一程序中併發執行,提高了程式的執行效率。
多執行緒的使用
1.匯入執行緒模組
import threading
2.引數說明
- 執行緒可以執行帶有引數的任務。
- 執行緒的執行是無序的,由作業系統排程器決定。
- 主執行緒通常會等待所有子執行緒結束後才結束,但也可以透過設定守護執行緒(daemon thread)來改變這一行為。
- 執行緒之間共享全域性變數,但這也可能導致資料同步問題。
互斥鎖和死鎖
- 互斥鎖(Mutex):用於保護共享資源,確保同一時間只有一個執行緒可以訪問該資源。
- 死鎖(Deadlock):當兩個或更多執行緒無限期地等待一個資源,而該資源又被另一個執行緒持有時,就發生了死鎖。
程序和執行緒的對比
- 程序:作業系統分配資源的基本單位,每個程序都有獨立的記憶體空間和系統資源。
- 執行緒:作業系統排程的基本單位,執行緒之間共享程序的資源,更輕量級,適合處理併發任務。
ip地址的介紹
IP地址是網際網路協議地址(Internet Protocol Address)的縮寫,用於在IP網路中唯一標識一個裝置。它通常由四個數字組成,每個數字在0-255之間,用點號分隔。IP地址分為IPv4和IPv6兩種版本,其中IPv4是目前廣泛使用的版本。
埠和埠號的介紹
埠是計算機上用於接收和傳送資料的介面。每個埠都有一個唯一的埠號,用於標識和區分不同的服務或應用程式。常見的埠號有HTTP(80)、HTTPS(443)、FTP(21)等。
tcp的介紹
1.透過ip地址找到網路中的裝置
2.透過埠號找到對應程序的埠
3.傳輸資料時還需要使用傳輸協議(TCP),保證資料的可靠性
4.socket完成程序之間網路資料的傳輸
socket的介紹
程序之間通訊的一個工具Socket是網路程式設計中用於程序間通訊的一個抽象層,它提供了對TCP/IP、UDP等網路通訊協議的封裝。透過Socket,應用程式可以傳送和接收資料,實現不同計算機之間的通訊。
tcp網路應用程式的開發流程
tcp客戶端程式開發
- 建立Socket物件。
- 連線到伺服器(指定IP地址和埠號)。
- 傳送和接收資料。
- 關閉連線。
tcp服務端的程式開發
- 建Socket物件。
- 繫結IP地址和埠號。
- 開始監聽連線請求。
- 接受客戶端連線。
- 傳送和接收資料。
- 關閉連線。
設定埠號複用
在某些情況下,伺服器程式可能需要在程式重啟時立即使用之前繫結的埠號。這時可以設定埠號複用(SO_REUSEADDR)選項,允許伺服器程式立即重新繫結到該埠。
tcp網路應用程式的注意點
- 併發處理:服務端需要能夠同時處理多個客戶端的連線請求和資料傳輸。
- 異常處理:在網路程式設計中,網路故障、連線中斷等異常情況時有發生,需要編寫健壯的異常處理程式碼。
- 資源管理:合理管理Socket資源、記憶體資源等,避免資源洩漏和效能問題
- 當 TCP 客戶端程式想要和 TCP 服務端程式進行通訊的時候必須要先建立連線
- TCP 客戶端程式一般不需要繫結埠號,因為客戶端是主動發起建立連線的。
- TCP 服務端程式必須繫結埠號,否則客戶端找不到這個 TCP 服務端程式。
- listen 後的套接字是被動套接字,只負責接收新的客戶端的連線請求,不能收發訊息。
- 當TCP 客戶端程式和 TCP 服務端程式連線成功後,TCP 伺服器端程式會產生一個新的套接字,收發客戶端訊息使用該套接字。
- 關閉 accept 返回的套接字意味著和這個客戶端已經通訊完畢。
- 關閉 listen 後的套接字意味著服務端的套接字關閉了,會導致新的客戶端不能連線服務端,但是之前已經接成功的客戶端還能正常通訊。
- 當客戶端的套接字呼叫 close後,伺服器端的recv 會解阻塞,返回的資料長度為0,服務端可以透過8.返回資料的長度來判斷客戶端是否已經下線,反之服務端關閉套接字,客戶端的recv 也會解阻塞,返回的資料長度也為0。
多人版tcp服務端程式
多人版TCP服務端程式需要能夠同時處理多個客戶端的連線請求和資料傳輸。這通常需要使用多執行緒或多程序技術來實現併發處理。每個客戶端連線都由一個單獨的執行緒或程序負責處理,從而實現多人同時線上通訊。
socket之send和recv的原理剖析
- send:在TCP中,send函式用於向連線的對端傳送資料。資料被封裝在TCP報文中,透過網路傳輸到對端。send函式在資料被成功寫入傳送緩衝區後返回,但並不意味著資料已經被對端接收。
- recv:recv函式用於從連線的對端接收資料。它從接收緩衝區中讀取資料,並返回給呼叫者。如果接收緩衝區中沒有資料