C 服務端面試準備(4)Linux及多執行緒相關

2021-10-04 20:37:56 字數 2786 閱讀 9023

宣告:本文內容純屬博主自己查詢和歸納的個人所需的知識點,僅作參考,如有錯誤,博主強烈希望您指出。如果您是某個知識點的原創博主,如有需要,可聯絡本人加上鏈結。本文內容會根據博主所需進行更新,希望大家多多關照。

pcb:程序控制塊,存放檔案描述符表,本質是乙個結構體

乙個程序有乙個檔案描述符表,大小為1024位元組,前三個被占用,分別是stdin_fileno、stdout_fileno和stderr_fileno

檔案描述符作用:尋找磁碟檔案

檢視磁碟命令:df -h

在多執行緒程式設計實踐中,執行緒的個數往往多於cpu的個數,所以一般都稱多執行緒併發程式設計而不是多執行緒並行程式設計。

在父程序中執行fork並exit退出;

在子程序中呼叫setsid函式建立新的會話;

在子程序中呼叫chdir函式,讓根目錄 「/」 成為子程序的工作目錄;

在子程序中呼叫umask函式,設定程序的umask為0;

在子程序中關閉任何不需要的檔案描述符(close(fd))或者重定向"/dev/null"

建立乙個互斥量,用lock_guard或者unique_lock封裝互斥量

建立條件變數,用wait成員函式等待條件滿足

另一線程使用notify_one或notify_all後啟用wait

wait拿鎖後判斷第二個引數是否為true,如果true則執行下面的**,如果false則表示條件不滿足,繼續等待下次的啟用

程序是分配資源的基本單位;執行緒是系統排程和分派的基本單位。

乙個程序可以擁有多個執行緒,屬於同一程序的執行緒,具有相同的位址空間,堆是共享的,棧是私有的。

程序開銷大,執行緒開銷小

執行緒間通訊相對方便,程序間通訊相對複雜

多程序更健壯,多執行緒容易出錯

程序是乙個資源的容器,為程序裡的所有執行緒提供共享資源,是對程式的一種靜態描述,執行緒是計算機最小的排程和執行單位,是對程式的一種動態描述

避免阻塞

單個執行緒中的程式,是順序執行的。如果前面的操作發生了阻塞,那麼就會影響到後面的操作。這時候可以採用多執行緒

避免cpu空轉

有時候處理一條請求,會涉及到資料庫訪問、磁碟io等操作,這些操作的速度比cpu慢很多,而在等待這些響應的時候,cpu卻不能去處理新的請求,沒有充分利用資源,這時多執行緒就發揮作用了

提公升效能

在滿足條件的前提下,多執行緒確實能提公升效能:

第1,任務具有併發性,子任務之間不能有先後順序的依賴,必須是允許並行的,另外,還不能有資源競爭

第2,只有在cpu是效能瓶頸的情況下,多執行緒才能實現提公升效能的目的。

第3,就是需要有多核cpu才行,如果上述條件都滿足,有乙個經驗公式可以計算效能提公升的比例,叫阿姆達爾定律:

速度提公升比例 = 1/[(1-p)+(p/n)]

其中p是可並行任務的比例,n是cpu核心數量

編譯: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

qgdb也可以直接除錯core檔案檢視錯誤:

core 指該程式執行時,程序空間的記憶體分布

dumped 表示核心已經把core丟擲

通常,出現段錯誤提示時程式執行目錄下應該自動生成乙個core檔案用來儲存核心丟擲的core,但是,由於linux環境一般預設設定core檔案限制為0,所以一般情況下無法生成core檔案。

2.檢視core檔案大小限制:ulimit -c

3.將其修改為無限制:ulimit -c unlimited

4.執行命令:gdb 執行檔名 core

5.gdb輸入where

命令列檢視執行緒資訊:

執行緒棧結構的檢視:

利用gdb檢視執行緒資訊:

進入gdb除錯:

相容性:windows向後相容,linux核心公升級可能就不相容,軟體方面windows佔優

程序:單個程序windows不能執行,linux可以

效能:windows圖形介面,很多渲染,效能降低,linux少,用命令列工作,效能好

檔案系統:linux有多種檔案系統,對檔案和裝置的管理佔優,windows較差

中斷優先順序:windows有32級,linux似乎只有5級,異常分為故障(fault)、陷阱(trap)和中止(abort)

軟體啟動:windows用登錄檔,linux用配置檔案,靈活性高

c 服務端面試個人小結

首先思科是由於大批招實習生,當天安排了有20個學生來面試。各個部門聯合交叉招聘,基本面試官都是各個團隊的技術總監或者team leader,你碰到的面試官不一定是你報的崗位方向,我碰到了有移動端,前端,後端和乙個全棧大牛,基本上我問了下都是工作有十幾年的,經驗很豐富。大概是6 7個面試室同事進行,每...

前端面試準備

1.簡單介紹下ajax ajax是web2.0技術的核心由多種技術集合而成,使用ajax技術不必重新整理整個頁面,只需對頁面的區域性進行更新,可以節省網路頻寬,提高頁面的載入速度,從而縮短使用者等待時間,改善使用者體驗。2.tcp與udp的區別 1 tcp面向連線 如打 要先撥號建立連線 udp是無...

前端面試準備 2

1.一次完整的http事務是怎麼樣的過程?1 通過網域名稱尋找ip位址 瀏覽器會首先搜尋自己的瀏覽器快取裡面有沒有dns快取,如果找到則結束,裡面有網域名稱對應的ip位址。如果瀏覽器快取沒有找到,則會繼續往作業系統中查詢是否有dns快取,如果找到則結束,否則進行下一步。瀏覽器會向本地的dns服務提供...