原创 one loop per thread

muduo中,one loop per thread即一個線程中一個loop循環。 這個線程是EventLoopThread對象, 這個循環就是其成員EventLoop對象調用的loop()循環,由這個循環來進行等待事件就緒並分

原创 輪詢調度算法 Round Robin

最近重溫了下nginx,看到負載均衡調度算法默認是round robin,也就是輪詢調度算法。 算法本身很簡單,輪着一個一個來,非常簡單高效公平的調度算法。 簡單的算法實現: int datas = [1, 2, 3, 4, 5]

原创 使用timerfd實現定時器功能

依舊以muduo爲例。 使用timerfd可以使用與socketfd類型相同的方式在IO複用中使用。 使用timerfd_create()創建一個timerfd,接着使用timerfd_settime()設置定時器的到期時間。 我

原创 linux lsof命令語法

文章目錄一 lsof命令1.1 語法1.2 選項二 示列2.1 列出所有打開的文件2.1.1 lsof輸出各列信息的意義如下2.1.2 文件類型:2.2 常用方式列出所有打開的文件:查看誰正在使用某個文件比使用+D選項,遍歷查看某

原创 STL 關聯容器的lower_bound()和upper_bound()

以std::map爲例, lower_bounder()返回的迭代器指向第一個[大於等於]目標值的元素(以升序爲例), upper_bound()返回的迭代器指向第一個 [大於]目標值的元素(以升序爲例)。 直接使用www.cpl

原创 linux netcat命令實例

netcat是網絡工具中的瑞士軍刀,它能通過TCP和UDP在網絡中讀寫數據。通過與其他工具結合和重定向,你可以在腳本中以多種方式使用它。使用netcat命令所能完成的事情令人驚訝。 netcat所做的就是在兩臺電腦之間建立鏈接並返

原创 windows netcat的安裝與使用

1 下載netcat 地址。下載完畢可能會報告:檢測到病毒,設置通過即可。 2 解壓 將解壓後的目錄(例如我的目錄爲D:\Program Files (x86)\netcat-win32-1.12)添加到環境變量Path中。

原创 linux gettimeofday()函數

函數信息 表頭文件:#include <sys/time.h> 函數原型:int gettimeofday(struct timeval *tv,struct timezone *tz) 函數說明:把目前的時間按tv所指的結構返回

原创 windows netstat命令小節

文章目錄幫助常用參數常用命令格式[netstate -a] 顯示所有連接[netstat -a | findstr "LISTENING"] 顯示所有監聽連接[netstat -an] 顯示所有連接,外部地址使用ip表示[nets

原创 使用eventfd喚醒阻塞在select、poll、epoll的IO複用

還是以muduo爲例: EventLoop中有兩個成員變量與喚醒阻塞的IO複用有關,wakeupFd_與wakeupChannel_; class EventLoop : noncopyable { public: ... v

原创 監聽套接字爲什麼要設置成非阻塞的?

常見的網絡通信模型都會使用IO多路複用技術如select、poll、epoll等。當有新的連接請求到來時,監聽套接字變爲可讀,然後調用accept()接收新連接、返回一個連接套接字。 如果監聽套接字是阻塞的,問題可能出在什麼地方?

原创 監聽套接字是非阻塞的,accept()返回的連接套接字是否也是阻塞的?

以muduo爲例,在類Acceptor中,成員變量監聽套接字acceptSocket_在Acceptor構造時調用socket::createNonblockingOrDie(), 它的實現如下: int sockets::cre

原创 C++ 字節序測試代碼

小端字節序(Small Endian):低字節存儲在起始位置。 大端字節序(Big Endian):高字節存儲在起始位置。 #include <iostream> void TestEndian() { union TestD

原创 非阻塞connect的作用及代碼示例

connect 函數的調用涉及到TCP連接的三次握手過程,通常阻塞的connect 函數會等待三次握手成功或失敗後返回,0成功,-1失敗。如果對方未響應,要隔6s,重發嘗試,可能要等待75s的嘗試並最終返回超時,才得知連接失敗。即