多執行緒程式設計需要注意的問題

2021-08-01 10:11:36 字數 884 閱讀 4864

1、執行緒的優先順序

多執行緒程式設計中要注意協調好各個執行緒的優先順序。一般來說,控制線程的優先順序要高於

worker執行緒。這樣做,可以保證client(終端使用者或者其他模組)盡快得到響應。當控

制執行緒是與終端使用者互動的介面執行緒時更應如此,如果介面執行緒優先順序較低,介面可能

較長時間沒有反應,使用者很可能會懷疑命令是不是還沒有開始執行

2、防止棧溢位

(1)不在函式體內定義特別大的棧變數,必須要定義的時候,可以使用new在堆上分配。

(2)傳遞引數時,大的引數(如結構體,類)使用按指標傳遞,小的引數(如基本資料型別)使用按值傳遞。

3、run函式中event的處理順序

在run函式同時wait到兩個或者以上event時,要特別注意處理這些event的先後順序,避免因處理順序不當引起的問題。 

如果wait函式每次只能接收乙個事件,則上述問題不需要特別關注

4、提高控制線程的響應速度

(1) 減輕控制線程的負擔,把更多的工作交給worker執行緒來做。這麼做的原因和第一條一樣,是為了提高控制線程的響應速度,從而提高client的滿意度。 

(2) 注意worker執行緒中訊號量的使用,防止worker執行緒長時間堵塞控制線程。典型的,

控制線程和worker執行緒會同時訪問乙個成員變數,並且其中至少有乙個執行緒還要修改這個成員變數,如果worker執行緒用訊號量lock了這個成員變數,然後做一些費時的工作(比如運算元據庫),那麼在它完成這些工作並unlock這個成員變數之前,控制線程訪問這個成員變數時都會被堵塞。所以,應該儘量減少worker執行緒lock的時間

5、注意訊號量的使用

socket程式設計需要注意的問題

1.connect tcp sock stream 是連線到服務端,udp sock dgram 是把本地位址埠和服務端的對應起來,並沒有建立連線 connect前也可以用bind 繫結本地位址埠到clientfd,bind的引數是本地位址埠 不使用bind則會自動繫結個 2.如果是udp,則可以不...

需要注意的問題

決策樹id3和c4.5的差別?各自優點?boost演算法 cart 回歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則 gbdt與隨機森林演算法的原理以及區別。優化演算法中常遇到的kkt條件?作用是?最近鄰演算法knn 分類與回歸 l1和l2函式?l1和l2正則項的比較,如何解決 l1 求導困難...

ABAP程式設計需要注意的小問題

一 select語句中使用for all entries in需要注意的問題 在abap程式設計中,使用for all entries in是必不可少的語句,使用這個語句是先取出一些資料放到乙個內錶中,然後參考這張內錶的資料取出其它的資料,這在abap開發中非常常用,例如 data begin of...