Nginx相關知識

目錄

一.HTTP請求數據在服務器中的傳輸與處理詳解

1.2 套字節?

1.3 零拷貝技術?

二.I/O模型?

2.1 I/O模型簡介

2.2 常見的I/O模型及其特點

1.同步/異步

2.阻塞vs 非阻塞

3.?同步/異步與阻塞/非阻塞的關系

4.多路復用I/O模型

5.異步I/O模型

三.Nginx模塊

3.1 概述nginx

3.2 nginx配置文件?

3.2.1?Nginx的配置文件的組成部分

3.2.2 主配置文件 (nginx.conf)核心結構

3.2.3?子配置文件 (conf.d/*.conf)

3.2.4 兩者的關系

四.Nginx的安裝

4.1 yum安裝

4.2 編譯安裝

4.3 nginx開機自啟

五.Nginx相關命令

5.1 nginx常見命令

5.2?Nginx的信號

六. Nginx運維三部曲:日志分割、無縫升級與版本回滾實戰?

6.1 分割日志

6.2 升級nginx

6.2.1升級思路

6.2.2 平滑升級nginx?

6.3?回滾(退回舊版本)


一.HTTP請求數據在服務器中的傳輸與處理詳解

1.?客戶端發送數據

  • 客戶端(如瀏覽器)通過HTTP請求向服務器發送數據。

  • 數據被打包成TCP/IP協議的數據包,通過網絡傳輸到服務器的網卡。


2.?網卡接收數據

  • 服務器的網卡接收到客戶端發送的數據包。

  • 網卡通過DMA(Direct Memory Access,直接內存訪問)技術,將數據包直接寫入內核空間的內存緩沖區,而不需要CPU的干預。


3.?數據進入內核空間

  • 數據包被寫入內核空間的接收緩沖區(Receive Buffer)

  • 內核的網絡協議棧(如TCP/IP協議棧)對數據包進行解析,包括:

    • 檢查數據包的完整性(如校驗和)。

    • 解析IP頭和TCP頭,確定數據包的目標端口和應用程序。


4.?數據從內核空間到用戶空間

  • 內核將解析后的數據從接收緩沖區復制到用戶空間的應用程序緩沖區(Application Buffer)

  • 這個過程通常通過系統調用(如readrecv)完成。


5.?應用程序處理數據

  • 應用程序(如Nginx)從用戶空間的緩沖區中讀取數據。

  • 應用程序根據業務邏輯處理數據,例如:

    • 解析HTTP請求。

    • 生成HTTP響應。

    • 將響應數據寫入用戶空間的發送緩沖區。


6.?數據從用戶空間到內核空間

  • 應用程序通過系統調用(如writesend)將響應數據從用戶空間的發送緩沖區復制到內核空間的發送緩沖區(Send Buffer)


7.?數據從內核空間到網卡

  • 內核的網絡協議棧將發送緩沖區的數據打包成TCP/IP協議的數據包。

  • 內核通過DMA技術將數據包從發送緩沖區直接傳輸到網卡。


8.?網卡發送數據

  • 網卡將數據包發送到網絡中,傳輸回客戶端。

1.2 套字節?

套接字(Socket)是網絡編程中的一種抽象概念,用于實現不同主機之間的通信。通過套接字,應用程序可以在網絡上進行數據傳輸,支持 TCP、UDP 等多種協議。

套字節的組成

IP 地址和端口號

  • IP 地址用于標識網絡中的主機。
  • 端口號用于標識主機上的具體應用程序

1.3 零拷貝技術?

"HTTP請求數據在服務器中的傳輸與處理"的過程可以看出在傳統的 I/O 操作中,數據通常需要在用戶空間和內核空間之間多次復制,而零拷貝(Zero-Copy)旨在減少數據在內存中的復制次數,從而提高數據傳輸的效率。

零拷貝技術的工作原理

零拷貝技術通過以下方式避免數據在內存中的多次復制:

  1. 直接內存訪問(DMA)
    • 使用 DMA 技術,數據可以直接從磁盤讀取到內核緩沖區,無需 CPU 參與。
  2. 內存映射(mmap)
    • 將內核緩沖區映射到用戶空間,用戶程序可以直接訪問內核緩沖區,無需將數據復制到用戶空間。
  3. sendfile 系統調用
    • 在 Linux 中,sendfile?系統調用可以直接將數據從文件描述符傳輸到網絡套接字,無需經過用戶空間

二.I/O模型?

2.1 I/O模型簡介

I/O模型(Input/Output Model)是計算機系統中用于處理輸入輸出操作的一種機制,它決定了程序如何與外部設備(如磁盤、網絡、鍵盤等)進行數據交互。不同的I/O模型對程序的性能、并發能力和資源消耗有重要影響。

2.2 常見的I/O模型及其特點

1.同步/異步

程序執行流程是否需要等待操作完成。

同步:程序發起一個操作后,必須等待該操作完成才能繼續執行后續代碼。

異步:程序發起一個操作后,不需要等待操作完成,可以繼續執行其他任務。操作完成后,系統會通知程序進行處理。

2.阻塞vs 非阻塞

線程是否會被掛起等待操作完成。

阻塞:當程序發起一個操作時,如果操作不能立即完成,線程會被掛起,直到操作完成。

非阻塞:當程序發起一個操作時,如果操作不能立即完成,會立即返回一個錯誤或狀態,線程可以繼續執行其他任務。

3.?同步/異步與阻塞/非阻塞的關系

  1. 同步阻塞:程序發起操作后,必須等待操作完成,線程會被掛起。

  2. 同步非阻塞:程序發起操作后,如果操作不能立即完成,會立即返回,程序需要輪詢檢查操作狀態。

  3. 異步阻塞:這種組合在實際中很少見,因為異步操作通常是非阻塞的。

  4. 異步非阻塞:程序發起操作后,不需要等待操作完成,可以繼續執行其他任務。操作完成后,系統會通知程序進行處理。

4.多路復用I/O模型

特點:單線程監控多個I/O操作:使用一個線程同時監控多個文件描述符(如Socket),當某個文件描述符就緒時,通知程序進行處理。

優點:高效處理大量并發連接,減少線程數量,節省資源。

缺點:不同操作系統的實現方式不同(如epoll僅適用于Linux)。

常見的多路復用I/O模型有:

  1. select
    • 支持的文件描述符數量有限(通常為1024),效率較低。
    • 需要遍歷所有文件描述符來找到準備就緒的 I/O 操作,時間復雜度為O(n)。
  2. poll
    • 解決了select的文件描述符數量限制,但效率仍然不高。
    • 同樣需要遍歷所有文件描述符,時間復雜度為O(n)。
  3. epoll(Linux特有)
    • 高效支持大量文件描述符,時間復雜度為O(1)。
    • 使用事件通知機制,只處理就緒的文件描述符。

5.異步I/O模型

特點

  1. 完全非阻塞
    • 程序發起I/O操作后,不需要等待操作完成,可以繼續執行其他任務。
  2. 事件通知
    • I/O操作完成后,系統會通過回調函數或信號通知程序進行處理。
  3. 高效利用資源
    • 避免了線程阻塞,能夠充分利用CPU和內存資源

三.Nginx模塊

3.1 概述nginx

NGINX(發音為“engine-x”)是一個高性能的?Web服務器反向代理服務器?和?負載均衡器

主要功能包括:?

靜態內容服務

  • 高效處理HTML、CSS、JS、圖片等靜態文件

  • 支持sendfile零拷貝技術,大幅提升文件傳輸效率

動態內容處理:通過FastCGI支持PHP、Python等動態語言

負載均衡:支持HTTP、TCP/UDP負載均衡

?補充:在Nginx中,支持HTTP負載均衡TCP/UDP負載均衡分別對應應用層(L7)和傳輸層(L4)的流量分發能力,兩者的核心區別在于協議棧層級和功能特性。?

nginx的基礎特性包括:

  • 模塊化設計,較好的擴展性

  • 高可靠性

  • 支持熱部署:不停機更新配置文件,升級版本,更換日志文件

  • 低內存消耗:10000個keep-alive連接模式下的非活動連接,僅需2.5M內存

  • event-driven, aio, mmap,sendfile


3.2 nginx配置文件?

3.2.1?Nginx的配置文件的組成部分

主配置文件:nginx.conf

子配置文件: include conf.d/*.conf

3.2.2 主配置文件 (nginx.conf)核心結構

# 全局上下文 (Main Context)
user  nginx;
worker_processes  auto;# 事件驅動配置 (Events Context)
events {worker_connections  1024;
}# HTTP核心配置 (HTTP Context)
http {include       /etc/nginx/mime.types;default_type  application/octet-stream;# 包含子配置文件include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}# 流代理配置 (Stream Context)
stream {include /etc/nginx/stream.d/*.conf;
}

3.2.3?子配置文件 (conf.d/*.conf)

子配置文件一般在主配置文件的http部分

http塊中可以包含多個子配置文件,常見的子配置文件

  • HTTP 塊?是 Nginx 配置的核心部分,包含?server?塊、location?塊、upstream?塊等。
  • Server 塊?定義虛擬主機,包含?location?塊。
  • Location 塊?定義 URL 路徑的處理規則。
  • Upstream 塊?定義負載均衡的后端服務器組。
  • Include 指令?用于引入子配置文件,實現配置文件的模塊化。

3.2.4 兩者的關系

Nginx 的主配置文件(nginx.conf)和子配置文件(如?conf.d/*.conf)之間是?分層包含關系,通過模塊化設計實現配置的靈活管理。?


四.Nginx的安裝

4.1 yum安裝

1.配置好基礎倉庫后# 2. 安裝EPEL倉庫
yum install -y epel-release# 3. 安裝nginx
yum install -y nginx# 4. 啟動nginx
systemctl start nginx

4.2 編譯安裝

準備工作

#安裝依賴包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
#新建nginx用戶便于管理
useradd -M -s /sbin/nologin nginx
#官網下載包
wget http://nginx.org/download/nginx-1.18.0.tar.gz

開始編譯

tar xf nginx-1.18.0.tar.gz 
mkdir /apps/nginx -p
cd nginx-1.18.0/                           #解壓源碼包./configure --prefix=/apps/nginx \         #配置編譯選項
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
#輸入完成后點擊回車鍵make -j2 && make install                    #編譯并安裝chown -R nginx.nginx /apps/nginx            #加權限ln -s /apps/nginx/sbin/nginx /usr/sbin/     #直接啟動 不需要絕對路徑ll /apps/nginx/         #檢查該路徑下是否存在安裝的文件ls -l /apps/nginx/sbin/nginx       #如果有 nginx 可執行文件,說明編譯成功。/apps/nginx/sbin/nginx -v         #如果返回類似 nginx version: nginx/1.18.0,說明安裝成功。/apps/nginx/sbin/nginx             #啟動 Nginxps -ef | grep nginx                #如果看到 master 和 worker 進程,說明 Nginx 已運行。

??

?

4.3 nginx開機自啟

創建nginx自啟文件?

vim /usr/lib/systemd/system/nginx.service
#建立文件#修改文件內容
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,如果不對 啟動不了
ExecStart=/apps/nginx/sbin/nginx
#注意啟動文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID[Install]
WantedBy=multi-user.target

?重新加載文件,啟動

systemctl daemon-reload 
#重新加載配置
systemctl enable --now nginx
#開機自啟并立即啟動    如果logs下有nginx.pid文件那會啟動失敗,只需刪除logs下的nginx.pid即可。chown -R nginx.nginx /apps/nginx
#修改權限
systemctl is-enabled nginx#如果輸出 enabled,表示 Nginx 已成功設置為開機自啟

?


補充:之后的學習中,會遇到在一臺服務器上運行多個 Nginx 實例的情況為避免 PID 沖突,所有實例都會嘗試使用同一個?pid?文件路徑。

###如果需要修改pid文件可以執行以下操作#################
mkdir /apps/nginx/run/
#創建目錄
vim /apps/nginx/conf/nginx.conf
#修改配置文件
pid   /apps/nginx/run/nginx.pid;
#找到 pid的位置修改  

五.Nginx相關命令

5.1 nginx常見命令

#基本格式
nginx [選項] [參數]
選項功能描述
-c <配置文件>指定自定義的配置文件路徑。
-t測試配置文件語法是否正確。
-T測試配置文件并打印解析后的配置內容。
-q在測試配置文件時以靜默模式運行,只輸出關鍵信息。
-g <全局配置>在命令行中指定全局配置選項。
-e <錯誤日志文件>設置錯誤日志文件的路徑。
-s <信號>向 Nginx 發送信號(如?stopreload)。
-s <文件>啟動 Nginx 并將 master 進程的 PID 寫入指定文件。
-p <工作目錄>設置工作目錄,用于存放日志文件和臨時文件。
-V顯示 Nginx 的版本、編譯信息和配置參數。
-h顯示幫助信息,包括所有可用的命令行選項。
-q <文件>在測試配置文件時,將輸出結果寫入指定文件

5.2?Nginx的信號

Nginx 的信號(Signals)是用于控制 Nginx 進程行為的機制。通過向 Nginx 的 master 進程發送不同的信號,可以實現停止、重啟、重新加載配置等操作。

#基本格式
nginx  -s 信號
信號功能描述使用方式
stop立即停止 Nginx 進程。nginx -s stop?或?kill -TERM <pid>
quit優雅地停止 Nginx 進程。nginx -s quit?或?kill -QUIT <pid>
reload重新加載配置文件。nginx -s reload?或?kill -HUP <pid>
reopen重新打開日志文件。nginx -s reopen?或?kill -USR1 <pid>
USR2熱升級 Nginx 可執行文件。kill -USR2 <pid>
WINCH優雅地關閉舊的 worker 進程(熱升級后使用)。kill -WINCH <pid>
TERM/INT立即停止 Nginx 進程。kill -TERM <pid>?或?kill -INT <pid>
HUP重新加載配置文件。kill -HUP <pid>

六. Nginx運維三部曲:日志分割、無縫升級與版本回滾實戰?

6.1 分割日志

為什么需要分割日志?

  • 文件過大:單個日志文件過大可能導致磁盤空間不足或日志分析工具無法處理。

  • 歸檔管理:按時間或大小分割日志,便于歸檔、備份和清理。

  • 性能優化:避免日志文件過大影響 Nginx 的性能。

cd /apps/nginx/logs# 1. 備份舊日志(保留原權限)
mv --backup=numbered --preserve=all access.log access.log.bak# 2. 創建新日志并設置正確權限
touch access.log
chown nginx:nginx access.log access.log.bak error.log  # 同時修正所有日志權限
chmod 644 access.log access.log.bak error.log# 3. 通知 Nginx 重新打開日志
nginx -s reopen 2>/dev/null || kill -USR1 $(cat nginx.pid 2>/dev/null)# 4. 驗證結果
ls -lh access.log* error.log*

6.2 升級nginx

6.2.1升級思路

  1. 將舊Nginx文件換成新Nginx文件(注意備份)

  2. 向master進程發送USR2信號

  3. master進程修改pid文件名,加后綴.oldbin

  4. master進程用新Nginx文件啟動新master進程,系統中將有新舊兩個Nginx主進程共同提供Web服務

  5. 向舊的Nginx服務進程發送WINCH信號,使舊的Nginx worker進程平滑停止,并刪除Nginx.pid.oldbin文件

  6. 向舊master進程發送QUIT信號,關閉老master

  7. 如果發現升級有問題,可以回滾向老master發送HUP,向新master發送QUIT

6.2.2 平滑升級nginx?

?Nginx 的平滑升級是指在不停機的情況下,將 Nginx 從舊版本升級到新版本。這樣可以確保服務不中斷,用戶體驗不受影響。

從nginx1.18升級到nginx1.20

#關閉防火墻
systemctl stop firewalld 
setenforce 0
#啟動服務
systemctl start nginx
#下載安裝包到src目錄
wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/cd /usr/local/src/;ls

?

tar xf nginx-1.20.2.tar.gz 
cd nginx-1.20.2/;ls

重新編譯安裝#檢測編譯環境 加模塊
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module#不要make install
make

mv /apps/nginx/sbin/nginx /apps/nginx/sbin/nginx.bak
#將低版本的nginx主程序改名
cp /usr/local/src/nginx-1.20.2/objs/nginx /apps/nginx/sbin
#將新版本 拷入進去
/apps/nginx/sbin/nginx -t
#語法檢查

kill -USR2 `cat /apps/nginx/logs/nginx.pid`ps auxf|grep nginx
#會生成新的master進程,需要結束舊的

cat /apps/nginx/los/nginx.pid #1.20.2版本的cat /apps/nginx/los/nginx.pid.oldbin  #1.18版本的kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`
#優雅關閉 舊版本的master processpstree -p |grep nginxcurl -I http://localhost
#檢查新版本是否實際生效,輸出中應包含 Server: nginx/1.20.2。ps -ef | grep nginx | grep -v grep     #驗證舊 worker 已完全退出tail -n 20 /apps/nginx/logs/error.log
#檢查錯誤日志,確保沒有 bind() failed 或其他端口沖突錯誤。kill -QUIT `cat /apps/nginx/logs/nginx.pid.oldbin`
#如果確認新版本運行正常,可以安全關閉舊 master

6.3?回滾(退回舊版本)

回滾的本質是?重新激活舊 Master 的 Worker,并關閉新 Master。

所以必須滿足以下條件才能回滾:

  1. 舊 Master 進程仍在運行

  2. 舊 Worker 已停止(通過?kill -WINCH

  3. 未執行?kill -QUIT 舊PID(否則舊 Master 會退出

#喚起舊版本的主進程
kill -HUP `cat /apps/nginx/logs/nginx.pid.oldbin`#結束新版本的master進程
kill -QUIT `cat /apps/nginx/logs/nginx.pid`curl -I 127.1 
#通過 curl 發送一個 HEAD 請求到本地服務器并返回響應頭信息

若舊 Master 已退出

解決方案:手動啟動舊二進制文件

# 1. 關閉新版本
kill -TERM `cat /apps/nginx/logs/nginx.pid`# 2. 啟動舊版本
cp /apps/nginx/sbin/nginx.bak /apps/nginx/sbin/nginx
/apps/nginx/sbin/nginx -t && /apps/nginx/sbin/nginx

若舊 Worker 未完全關閉?

# 強制殺死殘留 Worker
pkill -9 -f "nginx: worker process"
# 再執行標準回滾流程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式數字身份:邁向Web3.0世界的通行證 | 北京行活動預告

數字經濟浪潮奔涌向前&#xff0c;Web3.0發展方興未艾&#xff0c;分布式數字身份&#xff08;Decentralized Identity&#xff0c;簡稱DID&#xff09;通過將分布式賬本技術與身份治理相融合&#xff0c;在Web3.0時代多方協作的分布式應用場景中發揮核心作用&#xff0c;是構建…

ES6入門---第三單元 模塊四:Set和WeakSet

set數據結構: 類似數組&#xff0c;但是里面不能有重復值&#xff0c;如果有&#xff0c;只顯示一個 set用法: let setArr new Set([a,b]); setArr.add(a); 往setArr里面添加一項 let setArr new Set().add(a).add(b).add(c); setArr.delete(b); 刪除一項 setArr.ha…

Cognito

首先Cognito沒有提供登錄至AWS控制臺的功能&#xff0c;然而您可以通過Cognito Identity Pool獲取到IAM role的credentials [1]&#xff0c;再另外通過代碼自行將IAM role credentials拼湊成AWS控制臺登錄的URL [2]。 最后&#xff0c;由于Cognito的使用除了User Pool以及Iden…

EfficientNet 改進:與Transformer結合的圖像分類模型

1.介紹 在計算機視覺領域,EfficientNet因其高效的網絡架構設計而廣受歡迎。 本文將深入分析一個結合EfficientNet主干和Transformer分類頭的創新模型實現。 模型概述 這個實現將EfficientNet的高效特征提取能力與Transformer的強大序列建模能力相結合,主要包含以下幾個核心…

復雜網絡系列:第 5 部分 — 社區檢測和子圖

關鍵詞&#xff1a;Community Detection Algorithms 一、說明 在本教程中&#xff0c;我們將探討網絡分析的兩個基本方面&#xff1a;社區檢測和使用子圖。了解這些概念將使您能夠發現復雜網絡中隱藏的結構和關系。 二、何為社區&#xff0c;何為社區檢測&#xff1f; 2.1 …

【辦公類-99-04】20250504閔豆統計表excle轉PDF,合并PDF、添加中文字體頁眉+邊框下劃線

需求說明 督導檢查&#xff0c;各條線都要收集資料。 今天去加班&#xff0c;遇到家教主任&#xff0c;她讓我用保教主任的彩色打印機打印這套活躍度表格。&#xff08;2023學年上學期下學期-2024學年上學期&#xff0c;就是202309-202504&#xff09; 每個excle都是內容在A4一…

升級 CUDA Toolkit 12.9 與 cuDNN 9.9.0 后驗證指南:功能與虛擬環境檢測

#工作記錄 在 NVIDIA 發布 CUDA Toolkit 12.9 與 cuDNN 9.9.0 后&#xff0c;開發者紛紛選擇升級以獲取新特性和性能提升。 CUDA Toolkit 12.9 與 cuDNN 9.9.0 發布&#xff0c;帶來全新特性與優化-CSDN博客 然而&#xff0c;升級完成并不意味著大功告成&#xff0c;確認升級后…

LLM論文筆記 28: Universal length generalization with Turing Programs

Arxiv日期&#xff1a;2024.10.4機構&#xff1a;Harvard University 關鍵詞 圖靈機 CoT 長度泛化 核心結論 Turing Programs 的提出 提出 Turing Programs&#xff0c;一種基于圖靈機計算步驟的通用 CoT 策略。通過將算法任務分解為逐步的“磁帶更新”&#xff08;類似圖靈…

【全隊項目】智能學術海報生成系統PosterGenius--圖片布局生成模型LayoutPrompt(1)

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;大模型實戰訓練營_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 前…

位圖的實現和拓展

一&#xff1a;位圖的介紹 ①&#xff1a;需要位圖的場景 給40億個不重復的無符號整數&#xff0c;沒排過序。給一個無符號整數&#xff0c;如何快速判斷一個數是否在這40億個數中&#xff1f; 要判斷一個數是否在某一堆數中&#xff0c;我們可能會想到如下方法&#xff1a; A…

排序功法入門指南【江湖算法筆記】

話說江湖風云變幻&#xff0c;各路英雄好漢行走江湖&#xff0c;總得有個名號排行。若問“東邪西毒南帝北丐”誰強誰弱&#xff0c;總得排個座次不是&#xff1f;這排序之道&#xff0c;恰似武功秘籍&#xff0c;練好了能號令群雄&#xff0c;練岔了怕是要被笑掉大牙&#xff0…

【中間件】brpc_基礎_用戶態線程中斷

bthread之用戶態線程中斷 源碼 1 簡介 interrupt_pthread 核心功能是 通過信號機制中斷阻塞的 pthread 線程&#xff0c;以實現線程的協作式中斷。 2 核心功能與設計 2.1 信號選擇與注冊 信號選擇&#xff1a;使用 SIGURG 作為中斷信號。 原因&#xff1a;SIGURG 通常用于…

Linux 的網絡卡

#本機操作系統CentOS 10 #核心版本 rootbogon:/etc# uname -r 6.12.0-65.el10.x86_64 網卡能不能被捉到可以使用【dmesg|grep xx】來判斷&#xff0c;有沒有驅動則可以使用lsmod看看模塊有沒有加載核心&#xff01;最后&#xff0c;以ifconfig xxx測試看看 觀察核心所捉到的網卡…

前端雙工通信的幾種方案詳細描述

前端實現雙工通信&#xff08;全雙工或半雙工&#xff09;的常見方案及詳細實現如下&#xff1a; 一、WebSocket&#xff08;全雙工&#xff09; 原理&#xff1a;基于 TCP 的持久化協議&#xff0c;客戶端與服務端建立雙向通信通道&#xff0c;支持實時雙向數據傳輸。 // 客…

KUKA機器人快速啟動設置

KUKA機器人在首次開機啟動時&#xff0c;有時在示教器上需要進行投入運行等相關的設置。如以下相關的信息需要處理&#xff1a; 1、機器人系統開機后&#xff0c;選擇T1運行模式&#xff1b;2、顯示提示信息&#xff1a;“RDC 存儲器和控制系統不一致什么被更換了”時&#xf…

游戲代碼C

以下將結合不同編程語言的特點及游戲開發中的實際應用&#xff0c;展示多種語言的游戲代碼示例&#xff08;以簡單游戲為例&#xff0c;展示代碼結構和邏輯差異&#xff09;。由于代碼篇幅較長&#xff0c;我將分語言進行說明并引用相關來源&#xff1a; 1. C# Unity&#xff…

LangChain Agent核心解析:Zero-Shot-ReAct策略實現與實戰指南

引言 在LangChain的Agent框架中&#xff0c;zero-shot-react-description 是一種預定義的Agent類型&#xff0c;它結合了Zero-Shot&#xff08;零樣本學習&#xff09; 和 ReAct&#xff08;推理行動&#xff09; 策略&#xff0c;主要用于根據工具的描述動態選擇和執行工具&a…

PyQt 或 PySide6 進行 GUI 開發文檔與教程

一、官網文檔 Qt 官方文檔&#xff1a;Porting to Qt 6 | Qt 6.9Qt 維基&#xff1a;???????Qt WikiQt for Python (PySide6) &#xff1a;???????Qt for Python - Qt WikiPySide6 快速上手指南&#xff1a;???????Getting Started - Qt for Python PyS…

2024年第十五屆藍橋杯省賽B組Python【 簡潔易懂題解】

2024年第十五屆藍橋杯省賽B組Python題解 一、整體情況說明 2024年第十五屆藍橋杯省賽B組Python組考試共包含8道題目&#xff0c;分為結果填空題和程序設計題兩類。 考試時間&#xff1a;4小時編程環境&#xff1a;Python 3.x&#xff0c;禁止使用第三方庫&#xff0c;僅可使…

Go語言--語法基礎4--基本數據類型--類型轉換

Go 是一種強類型的語言&#xff0c;所以如果在賦值的時候兩邊類型不一致會報錯。一個類型的值可以被轉換成另一種類型的值。由于 Go 語言不存在隱式類型轉換&#xff0c;因此所有的類型轉換都必須顯式的聲明。 強制類型轉換語法 使用 type (a) 這種形式來進行強制類型轉換&am…