原创 從零開發一個簡單的搜索引擎-索引模塊第一部分

注:本模塊會大量用到protobuf庫、cppjieba庫,不瞭解的讀者可以先去簡單瞭解一下這兩個庫怎麼使用,這裏就不贅述了。 (爲了避免本模塊的內容過長,筆者分兩篇完成,第一篇講搜索引擎索引的基礎知識和這個項目中索引模塊的基礎

原创 從零開發一個簡單的搜索引擎-綜述

簡述 搜索引擎是一個技術含金量非常高的話題,本着學習和提高的目的,在一個前輩的指點下,之前開發了一個對接Boost官網的站內搜索引擎,在學習和開發的過程中我的收穫很大,瞭解和掌握了很多技術細節,也複習了以前學過但是不是非常熟悉的一

原创 從零開發一個簡單的搜索引擎-公共模塊

爲了讓項目儘可能的解耦和,把項目中大多數模塊都用到的自定義功能函數以及和模塊具體業務無關的函數以 header-only的形式封裝成一個頭文件,其他模塊需要使用這些函數,直接包含這個頭文件即可。這個頭文件也算是可以自成半個模塊吧

原创 C++ emplace_back和push_back性能比較

概述 從理論上說,右值引用版的emplace_back要比左值引用版的push_back更快一些,因爲前者會調用參數的移動構造函數,而後者會調用參數的拷貝構造函數。熟悉這兩種構造函數的讀者自然明白移動構造函數不需要重新分配內存空間

原创 cache-主存機制和虛存-主存機制的異同分析

一、相同點 1.1 出發點相同 二者都是爲了提高存儲系統的性能價格比而構造的分層存儲體系,都力圖使存儲系統的性能接近高速存儲器,而價格和容量接近低速存儲器。 1.2 原理相同 都利用了CSAPP著名的局部性原理,把最近常用的信息塊

原创 gflags簡明使用指南

一、gflags簡單介紹 gflags是google開源的一套命令行參數解析工具。通常在項目開發中會有一種需求: 可以在代碼運行的時候指定某些代碼中某些參數的值 如果沒有顯式指定,這些參數可以使用默認的值 比如:服務器編程中需

原创 線程相關筆記

注意:本篇文章不是系統的線程知識講解,更多的是一些實用的線程常識和個人的筆記總結。如果讀者想要獲取更系統的OS線程知識講解,那麼本篇文章並不能很好的對你帶來幫助,請移步至更詳細系統的OS線程相關教程。 一、簡介 線程,有時又

原创 進程五態模型簡明理解

進程的基本狀態是:運行態,就緒態,阻塞態。如果把創建和結束加上,就可以組成五態模型。 一、五種狀態轉換圖 狀態圖說明: 就緒狀態 -> 運行狀態:根據系統的調度算法,處於就緒狀態的進程獲取到處理機資源(分派的時間片) 運

原创 兩個線程打印不同類型的字母

一、題目描述: 兩個線程分別打印26個英文字母的元音字母和輔音字母,分別按照字母序輸出。 二、解題思路: (1) 如果要求輸出一行 感覺看代碼都可以看明白了… (2)如果要求輸出兩行 由於線程之間共享全局變量,所以可以將26個字母

原创 紅黑樹筆記

紅黑樹的五條性質: 樹中的每個結點顏色不是紅的,就是黑的; 根結點的顏色是黑的; 所有爲 NULL 的葉子結點的顏色是黑的; 如果此結點是紅的,那麼它的兩個孩子結點全部都是黑的; 對於每個結點,從該結點到到該結點所有子孫結點的

原创 使用C++封裝一個socket通信框架

封裝一組socket常用通信操作,header only 風格。 #pragma once #include <unistd.h> #include <string> #include <sys/socket.h> #inclu

原创 如果ESTABLISHED隊列滿了,可是有連接需要從SYN隊列轉移

轉載至:https://blog.csdn.net/yangbodong22011/article/details/60468820 由於標題長度有限制,我把想要描述的問題再次描述下: 內核通常會爲每一個LISTEN狀態的So

原创 深入探索 Linux listen() 函數 backlog 的含義

轉載至:https://blog.csdn.net/yangbodong22011/article/details/60399728 1:listen()回顧以及問題引入 listen()函數是網絡編程中用來使服務器端開始監聽

原创 Linux下IO多路複用

文章目錄一、IO多路複用處理數據報文二、select1. 簡介2. 函數原型2.1 參數說明2.2 fd_set結構說明2.3 timeval結構說明2.4 返回值說明3. 就緒條件3.1 讀就緒3.2 寫就緒4. 函數使用5.

原创 Epoll的驚羣效應

什麼是驚羣效應? ​ 在多線程或者多進程環境中使用Epoll來處理事件,每個線程 / 進程都同時監聽着socket,那麼當socket中的某個事件就緒後或者添加新的事件進去,操作系統就不知道應該將哪個線程 / 進程喚醒來處理此次事