伺服器開發 linux多執行緒常用技術原理

2021-10-05 05:27:56 字數 2044 閱讀 3497

1 #1.cmake verson,指定cmake版本 

2 cmake_minimum_required(version 3.2)

3 4 #2.project name,指定專案的名稱,一般和專案的資料夾名稱對應

5 project(test_sqrt)

6 7 #3.head file path,頭檔案目錄

8 include_directories(

9 include

10 )

11 12 #4.源檔案目錄 指定源檔案目錄為src,並將其賦值給環境變數dir_srcs

13 aux_source_directory(src dir_srcs)

14 15 #5.設定環境變數,設定環境變數test_math的值為環境變數dir_srcs的值 編譯用到的原始檔全部都要放到這裡

16 set(test_math

17 $

18 )

19 20 #6.add executable file,新增要編譯的可執行檔案 將環境變數test_math目錄下的所有檔案編譯生成project_name目錄下的可執行檔案

21 add_executable($$

)22

23 #7.add link library,新增可執行檔案所需要的庫,比如我們用到了libm.so(命名規則:lib+name+.so),就新增該庫的名稱

24 target_link_libraries(

$ m)

參考部落格

參考部落格

read()原型及其返回值

非阻塞et模式下的read()和write()

優雅地關閉連線

shutdown-關閉半連線

程序收到sigpipe訊號後會終止,這對伺服器來說是不行的

sigpipe訊號的產生與處理

et 模式是一種邊沿觸發模型,在它檢測到有 i/o 事件時,通過 epoll_wait 呼叫會得到有事件通知的檔案描述符,每於每乙個被通知的檔案描述符,如可讀,則必須將該檔案描述符一直讀到空,讓 errno 返回 eagain 為止,否則下次的 epoll_wait 不會返回餘下的資料,會丟掉事件。而如果你的檔案描述符如果不是非阻塞的,那這個一直讀或一直寫勢必會在最後一次阻塞,這樣就不能在阻塞在epoll_wait上了,造成其他檔案描述符的任務餓死。

很簡單,et效率高

lt模式下,如果讀操作就緒(核心讀緩衝區有資料,epollin事件)就會把核心中的rlist拷貝一次,如果一次沒有處理完讀快取的資料就還會讀操作就緒(依然觸發epollin事件),又會把rlist拷貝一次。lt模式寫資料時會註冊epollout

et模式下,讀操作就緒只拷貝一次(觸發一次epollin事件)而且會比lt少許多epoll呼叫

所以可以看到智慧型指標的好處:

share_ptr本身提供記憶體釋放器,但並不能釋放陣列記憶體空間

多個share_ptr引用同一資料會釋放多次 記憶體錯誤

給share_ptr初始化時不能使用普通指標直接賦值

share_ptr存在迴圈引用的問題 當兩個sp相互等待對方先釋放就會發生死鎖 無法釋放記憶體 這時候可以引入weak_ptr解決 由於wake_ptr引用的物件計數值不會+1所以可以避免這種情況 例子

top:top命令是linux下常用的效能分析工具,能夠實時顯示系統各個程序資源占用狀況,類似於資源管理器。

ps:檢視程序資訊 其中程序狀態有五種r執行,s中斷,t停止,z僵死,d不可中斷

strace:可以跟蹤系統呼叫來知道程式在後台的執行過程

find:命令格式:find [查詢位置和][查詢規則][查詢完要做的操作]

查完操作:格式是-exec(或-ok) command {} ;(其中{}代表查詢返回檔案,command代表操作命令,比如 -exec ls -a {} ;

grep:用於查詢檔案中符合條件的字串 格式是 grep -引數 文字樣式 檔案或目錄

tcpdump:可以根據使用者的定義對網路上的資料報(的包頭)進行截獲分析

常用命令組合:

lsof:列出當前系統開啟檔案 網路連線和相關硬體也能被看作是檔案

linux 多執行緒聊天伺服器

自己寫的linux多執行緒聊天伺服器,可以實現併發,通過鍊錶新增人數。include include include include include include include include include include include typedef struct client typed...

Linux多執行緒伺服器 優化

例1 使用多執行緒提高響應速度假設我們有乙個類似計算器的服務,輸入數字公式,返回相應的結果,如果無解,返回 null r n 假設小明在很短的時間內發出10個請求,如果用單執行緒來乙個處理乙個,那麼這些請求會在佇列裡依次處理。假設乙個請求響應時間是10ms,那麼第二個請求響應時間將會為20ms 等第...

多執行緒伺服器

posix執行緒庫 a 與執行緒有關的函式都構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 打頭的。b 要使用這些庫函式,要引入標頭檔案。c 鏈結這些執行緒庫函式時要使用編譯命令的 lpthread 選項。int pthread create pthread t thread,con...