聲明:本文內容純屬博主本身查找和概括的我的所需的知識點,僅做參考,若有錯誤,博主強烈但願您指出。若是您是某個知識點的原創博主,若有須要,可聯繫本人加上連接。本文內容會根據博主所需進行更新,但願你們多多關照。
df -h
是指同一個時間段內多個任務同時都在執行,而且都沒有執行結束。併發任務強調在一個時間段內同時執行,而一個時間段由多個單位時間累積而成,因此說併發的多個任務在單位時間內不必定同時在執行 。linux
是說在單位時間內多個任務同時在執行。c++
在多線程編程實踐中,線程的個數每每多於CPU的個數,因此通常都稱多線程併發編程而不是多線程並行編程。shell
ps aux
,ps ajx
能顯示父進程,查看內存佔用:free -h
,查看當前cpu:top
運行態->掛起態:等待使用資源,如等待外設傳輸、人工干預等
運行態->就緒態:出現有更高優先權進程數據庫
本質爲一個僞文件,內核使用環形隊列機制,藉助內核緩衝區(4k)實現,數據一旦讀走,管道中不在存在編程
mmap,一種內存映射文件的方法,將一個文件或者其它對象映射進內存,無血緣關係的進程間可以使用共享映射區進行通訊,在要求高性能的應用中比較經常使用。mmap映射內存必須是頁面大小的整數倍,面向流的設備不能進行mmap,mmap的實現和硬件有關windows
簡單但不能攜帶大量信息,知足條件才發送,至關於中斷,有很強的延時性,全部信號都由內核(PCB)發送和處理
信號4要素:編號、名稱、事件、默認處理動做
信號處理方式:執行默認動做(終止進程、忽略信號、終止進程並生成CORE文件、暫停進程、繼續運行進程)、忽略、捕捉安全
kill -l
top -H
;ps -Lf
進程號,查看該進程的線程單個線程中的程序,是順序執行的。若是前面的操做發生了阻塞,那麼就會影響到後面的操做。這時候能夠採用多線程多線程
有時候處理一條請求,會涉及到數據庫訪問、磁盤IO等操做,這些操做的速度比CPU慢不少,而在等待這些響應的時候,CPU卻不能去處理新的請求,沒有充分利用資源,這時多線程就發揮做用了併發
在知足條件的前提下,多線程確實能提高性能:
第1,任務具備併發性,子任務之間不能有前後順序的依賴,必須是容許並行的,另外,還不能有資源競爭
第2,只有在CPU是性能瓶頸的狀況下,多線程才能實現提高性能的目的。
第3,就是須要有多核CPU才行,若是上述條件都知足,有一個經驗公式能夠計算性能提高的比例,叫阿姆達爾定律:
速度提高比例 = 1/[(1-P)+(P/N)]
其中P是可並行任務的比例,N是CPU核心數量app
編譯:gcc加要加-g,-g保留函數名和變量名
啓動:gdb 可執行文件
傳參:set args 參數1 參數2 ...
操做 | 命令 |
---|---|
查看第n行的上下程序 | l n |
設置查看n行上下程序 | set listsize n |
查看其餘文件程序 | l 文件名 : n 或 函數名 |
在n行打斷點 | b n |
查看斷點 | i b |
刪除斷點 | d n,n爲斷點編號 |
設置無效或有效斷點 | dis / enb n,n爲斷點編號 |
條件斷點 | b n if 變量==值 |
運行 | r 或 start,r直接到斷點,start進入程序第一行 |
單步執行 | n |
執行到下一個斷點 | c |
查看變量信息 | p 變量名 |
查看變量類型 | ptype 變量名 |
一直顯示變量信息 | display 變量名 |
取消顯示變量 | 先i display 查看變量編號n,而後undisplay n |
進入函數 | s |
離開函數 | finish |
跳出循環 | until,須要刪除斷點 |
離開gdb | q |
gdb也能夠直接調試core文件查看錯誤:
1.當一個程序出現段錯誤時,會出現如下提示:
Segmentation fault (core dumped)
core 指該程序運行時,進程空間的內存分佈
dumped 表示內核已經把core拋出
一般,出現段錯誤提示時程序運行目錄下應該自動生成一個core文件用來存儲內核拋出的core,可是,因爲linux環境通常默認設置core文件限制爲0,因此通常狀況下沒法生成core文件。
2.查看core文件大小限制:ulimit -c
3.將其修改成無限制:ulimit -c unlimited
4.運行命令:gdb 執行文件名 core
5.gdb輸入 where
命令行查看線程信息:
ps aux|grep 執行文件名
ps -aL|grep 執行文件名
pstree -p 主線程id
線程棧結構的查看:
ps stack 線程ID
利用gdb查看線程信息:
gdb attach 主線程ID
進入gdb調試:
info inferiors
:查看當前進程info threads
:查看當前線程bt
:查看當前線程棧結構thread n/ID
:切換線程(n表明第幾個線程)break 行號/函數名
:設置當前線程斷點break file.c:100 thread all
:在file.c文件第100行處爲全部通過這裏的線程設置斷點。set scheduler-locking off/on/step
:thread apply ID1 ID2 command
:讓一個或者多個線程執行GDB命令commandthread apply all command
:讓全部被調試線程執行GDB命令command變量 = $(wildcard 文件路徑)
變量 = $(patsubst 原名稱, 替換後的名稱, 源文件)
notdir
:去除文件名的目錄函數basename
:取文件名函數$@
:規則中的目標 $<
:規則中的第一個依賴 $^
:規則中全部依賴/
:換行