原创 select 的文件描述符爲什麼是1024?

一直不知道爲什麼select的文件描述符限制是比較小的? 於是去查看內核5.6的版本,其中在/include/uapi/linux/posix_types.h有說明 /* SPDX-License-Identifier: GPL-

原创 c++爲什麼有inline?

一.什麼是內聯函數 內聯函數的簡單理解就是編譯的時候把函數定義替換到調用的位置,用來降低運行時間,編譯器將使用函數的定義體來替代函數調用語句,這種替代發生在編譯階段 但是內聯函數僅僅只是對於編譯器的建議,編譯器是不是採取你的建議取

原创 epoll在多線程中的應用-EPOLLEXCLUSIVE和REUSEPORT(一)

以下均爲對epoll在多線程中的使用的一些筆記,如果有不對的地方,煩請指出 主要對於我所遇到的問題進行討論,不會討論代碼如何改寫,探討如何解決這個問題 一.引言 這些問題均是我在編寫我的Web服務器遇到的,我在編寫多線程Web服務

原创 在c++中爲什麼我們需要nullptr來取代NULL或者0?

最近發現很多同學在c++中表示空指針都習慣爲NULL或者0,這並不是一種優良的習慣 一.在c++中,0和NULL是什麼? 字符串常量0的類型是int,並非指針,當c++在只能使用指針的語境中發現了一個0,c++也會勉強的解釋爲一

原创 c++設計模式-單例模式

單例模式: 單例模式一般會分爲:餓漢單例和懶漢單例 餓漢式: 在類加載的時候就完成初始化,所以類加載比較慢,但是獲取對象的速度是比較快的. 懶漢式:在類加載的時候不初始化,等到第一次被使用的時候才進行初始化. 餓漢式: class

原创 leetcode(筆記)-找到兩個有序數組中的中位數

尋找兩個有序數組的中位數 給定兩個大小爲 m 和 n 的有序數組 nums1 和 nums2。 請你找出這兩個有序數組的中位數,並且要求算法的時間複雜度爲 O(log(m + n))。 你可以假設 nums1 和 nums2 不

原创 c++多線程中的利器-thread_local

我們在這裏簡單介紹一下在c++11中新添加的-thread_local 我們在介紹thread_local之間首先需要說明一下什麼是線程週期,以及什麼情況下的變量可以被聲明爲thread_local相等與將一個可變數據 一.什麼是

原创 c++設計模式-享元模式(Flyweight)

近期總結: 最近惰性很強,項目寫的也很差,博客也沒有按時更新,覺得自己碌碌無爲還安慰自己平凡可貴,接下來要好好整理一下最近複習和學到的知識 享元模式 一.我們爲什麼需要享元模式? 我們每學習一種新的設計模式,首先要明白這個模式可以

原创 內核學習筆記-RCU機制

一.什麼是RCU機制 RCU是Linux中比較重要的一種同步機制.顧名思義就是 " 讀,拷貝更新 " ,該機制記錄了指向共享數據結構的指針的所有使用者,在該結構將要改變的時候,首先創建一個副本,在副本中修改.在所有進行讀訪問的

原创 Linux學習筆記-夥伴算法

一.爲什麼要有夥伴算法? 夥伴算法是Linux系統一種管理內存的分配器,爲了減少內存碎片而設計。夥伴算法擁有兩個關鍵特徵:速率和效率。 二.夥伴算法是什麼? 夥伴算法把所有的空閒頁框分爲11塊鏈表,每塊鏈表分別包含大小爲1,2,

原创 C++的static 爲什麼不能和虛函數一起使用?

首先我們先做個例子試試看可以嗎? class A{ public : A(){}; ~A() = default; static virtual void test() {

原创 EPOLL 的 LT和ET-學習筆記

Epoll一般有兩種方式邊緣觸發(ET)和水平觸發(LT) epoll 默認模式是水平觸發 水平觸發: 只要滿足條件,就觸發事件(只要內核緩衝區中的數據沒有讀完,就會一直觸發) 邊緣觸發: 每當狀態發生變化的時候就觸發一個事件.

原创 操作系統中的堆棧區別

堆和棧是兩種內存分配的統稱。 一.棧 棧會存放函數的局部變量,函數的返回地址等。棧有"LIFO"(後進先出)的特點。 棧由操作系統分配,自動回收. 棧的大小受到限制。在x86體系下,棧一般通過esp 指向棧幀頂部,ebp指向底部

原创 c++11自旋鎖的實現

首先我們需要明確,自旋鎖式一種用於保護多線程共享資源的鎖,它在Linux 內核中也有所使用.(epoll 中有使用) 和一般互斥鎖不同的式當自旋鎖嘗試獲取CPU的時候可以是一種忙等的狀態,自旋鎖不能主動放棄CPU ,如果是內核中的

原创 vector的性能利器-reserve

vector是c++編程中的最常見的容器之一,可以幫助用戶自動管理存儲空間,需要分配存儲空間的場景,可以取代原生數組. vector在實踐的過程中,提升性能的要點就是儘量使用reserve,運行期能確定個數,應該用reserve,