多工程序

JJJhr發表於2024-06-15

執行緒的介紹

  • 介紹:多工除了使用程序,還可以使用執行緒
  • 概念:執行緒是程序中執行程式碼的一個分支,每個執行分支要想工作執行程式碼需要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函式用於從連線的對端接收資料。它從接收緩衝區中讀取資料,並返回給呼叫者。如果接收緩衝區中沒有資料

相關文章