原创 c++原子同步

#include <sys/cdefs.h> #include #include <stdio.h> using namespace std; int main(){ int v = 10; cout << __sync_fe

原创 redis skiplist閱讀

擼過一遍代碼之後,對一些數據結構才能更深的瞭解 讀完redis的跳躍表,現在用c++重新實現了插入、查詢和刪除3個api方法, 理解下來跳躍表, 主要思路有 1. 從上層逐漸到下層搜索,上層步長更大,這樣上層迅速定位到一個更接近的點。 2

原创 network flow 最大流

好久沒寫了,最近研究了一下,最大流算法。其實主要的思路,是尋找增廣路徑,找不到起點到匯點時就沒有了。下面寫下代碼 好了。 最大流算法能解決的問題, 1. 顧明思義,即一組網絡上能夠容納的最大流量問題 2. 可以解決數學的組合問題。其原理上

原创 字節對齊

今天寫代碼,遇到個問題,數據結構是這樣的,然後收header的時候,cmd內容怎麼都對不了,知道struct c++的字節對齊,這個結構體佔16字節。 struct PacketHeader { uint16_t magic_nu

原创 CMakeList 編寫和debug release區分

cmake_minimum_required(VERSION 2.6) PROJECT(active_service) EXECUTE_PROCESS(COMMAND git log -1 --pretty=format:%h OUT

原创 版本控制頭文件

#ifndef __VERSION_H__ #define __VERSION_H__ #define STRING_HELPER(str) #str #define

原创 上線服務觀察

上線一個服務需要觀察的點有 1. 服務的內存使用情況是否正常 在做agent的時候,由於後期改了監控的邏輯,導致一部分內存泄漏,內存持續增長。 覺得觀察的步驟是在程序上線幾個週期,5分鐘持續關注,如果一直上漲得思考,

原创 debug 新方法

直接上代碼吧 debug.h 如下 #ifndef __COMMON_DEBUG__ #define __COMMON_DEBUG__ #include <signal.h> typedef int signal_t; typedef

原创 自己寫的線程池, threadpool

這個代碼還沒有調試過, 不過應該問題不大, 下次用起來就直接用,調一下就好 #ifndef __THREAD_POOL_H__ #define __THREAD_POOL_H__ #include <pthread.h> #incl

原创 C++ 反射的實現

首先是要寫一個類,這個類主要有2個功能,註冊類和通過類名獲取類實例的功能 typedef map<string, void *> class_map; typedef void* (*CreateObject)(void); //聲明 c

原创 HAproxy 和Agent的內存管理

今天讀了agent的內存管理,其優勢在於不用頻繁地申請和釋放內存,從而消耗時間,但是也有劣勢在於內存只會增加,不會下降。那麼下面來解讀一下它的實現。 一: 首先從基本架構來說,可以看到,在內存裏面其實是由鏈表連接的pool。 每個po

原创 Nginx事件模塊小結

這兩天着重看nginx事件模塊的處理,這一部分跟網絡框架比較大。跟現在工作內容相關性也比較大,總結一下它在這方面的處理方式,下次寫代碼的時候可以用一下。得到了2點啓發: 1. 防止epoll驚羣,可以採用鎖的方式處理,但是不能等ep

原创 Http類

廢話不多說,以後直接用這個 /* * cycle.cc * * Created on : 2016.12.30 * Author : qiulu */ #include "http_helper.h" bool HttpHelpe

原创 對TCP狀態的新理解

以前一直不明白TCP的四次斷連接的意義在哪,通過一段時間實踐的領悟大約明白了 1. 首先發起斷連接的一方,發送一個FIN信號給被斷連接的從方,在C++的代碼裏表示爲close(fd),那麼這個連接就進入FIN_WAIT1狀態。 2.

原创 signal 進程通信

先看send: 1. 定義信號量函數 static void sighandler(int signo) { sigval tid; tid.sival_int = signo; cout