原创 Linux設置進程的調度策略和優先級

系統調用接口 /** * sched_setscheduler - change the scheduling policy and/or RT priority of a thread. * @p: the task in

原创 【Linux性能優化2】平均負載

什麼是平均負載 當系統響應變慢時,一般使用top或者uptime來查看系統負載情況。運行uptime命令的輸出信息如下: 其中 23:12:21 爲當前系統時間 up 42 min:爲系統已經運行的時間 2 users:當前登錄

原创 tcpdump抓包注意事項

使用tcpdump進行抓包,然後用wireshark進行分析的時候,出現了”Packet size limited during capture”,也不算是錯誤,只是數據包裏的內容無法完全查看清楚: 經過查詢,原因是因爲我在Li

原创 【Linux性能優化4】CPU上下文切換

如何查看系統的CPU上下文切換情況 vmstat可以查看系統的CPU上下文切換情況。它是一個常用的系統性能分析工具,主要用來分析系統的內存情況,也常用來分析系統的CPU上下文切換和中斷的次數。 執行如下的命令:vmstat 5

原创 Linux進程數據結構詳解

Linux系統中無論是進程還是線程都統一叫任務,有一個統一的結構task_struct進行管理。 linnux中關於task_struct的定義如下 Struct task_struct{ /* -1 unrunnable, 0

原创 【網絡編程】04-TCP三次握手

服務端準備連接的過程 創建套接字: int socket(int domain, int type, int protocol) domain就是指PF_INET、PF_INET6、PF_LOCAL等,表示什麼樣的套接字 typ

原创 【linux性能優化15】Linux內存是怎麼工作的

Linux的內存管理,是操作系統的最核心的功能 之一。內存主要用來存儲系統和應用程序的指令數據和緩存等。 內存映射 通常我們所說的計算機內存大小如4Gb/8Gb,是指物理內存。 當進程要訪問內存時時如何訪問的呢?是直接訪問物

原创 【設計模式之美3】面向對象、設計原則、設計模式、編程規範、重構,這五者有何關係

要具備編寫高質量代碼的能力,需要學習一些編程方法論,其中就包括面向對象、設計原則、設計模式、編程規範和重構技巧等。 面向對象 主流的編程範式或者編程風格有三種,分別是面向對過程、面向對象和函數式編程。面向對象又是最主流的,主要的編

原创 【linux性能優化】09-如何理解軟中斷

中斷的概念 中斷是系統用來響應硬件設備請求的一種機制,它會打斷進程的正常調度和執行,然後調用內核中的中斷處理程序來響應設備的請求。 中斷其實是一種異步的事件處理機制,可以提高系統的併發處理能力。由於中斷處理程序會打斷其他進程的運行

原创 【linux性能優化5】某個應用CPU使用率很高

CPU使用率的概念 CPU使用率是單位時間內CPU的使用情況,以百分比的方式展示。Linux是一個多任務的操作系統,將每個CPU的時間劃分爲很短的時間片,再通過調度器輪流分配給各個任務,爲了維護CPU時間,Linux通過事先定義的

原创 【網絡編程】03-套接字和地址

Socket到底是什麼? 網絡編程中到底如何理解socket,先看下面的圖 上面的圖表達了網絡編程中客戶端和服務器模型的核心邏輯。 服務器端:首選服務器端要先初始化號好socket,之後服務器端執行bind函數將自己的服務能力綁

原创 【設計模式之美4】當我們談論面向對象時都談些什麼

什麼是面向對象編程和麪向對象編程語言 面向對象編程的縮寫是OOP即Object Oriented Programming。對應的面向對象編程語言的縮寫是OOPL 即Object Oriented Programming Langu

原创 linux內核初始化

Linux內核的啓動從入口函數start_kernel開始,在init/main.c中,start_kernel就相當於內核的main函數。該函數中調用了很多的xxx_init函數。 創建0號進程 set_task_stack_e

原创 Linux進程數據結構(1)

Linux系統中無論是進程還是線程都統一叫任務,有一個統一的結構task_struct進行管理。 linnux中關於task_struct的定義如下 Struct task_struct{ /* -1 unrunnable, 0

原创 關於break和continue的那些事

區別 break 語句,它不僅可以跳出“循環體”,還可以跳出 switch。 break 也只能用於這兩種情況。break 語句不能用於循環語句和 switch 語句之外的任何其他語句中。 不管是 for 循環,還是 while