原创 一起來寫web server 08 -- 多線程+非阻塞IO+epoll

到了多線程,一些東西就變得耐人尋味了. 這個版本是在前面單線程epoll的基礎上引入了線程池,當然不是前面玩具一樣的線程池,而是一個通用的組件,生產者消費者隊列. 生產者消費者隊列 生產者消費者問題是操作系統中一個很經典的同

原创 一起來寫web server 05 -- 多線程進階版本

這個版本的web server比第4版稍微做了一點改進,那就是由主線程統一接收連接,然後連接的處理由子線程來完成.因此,這裏就引入了條件變量以及同步互斥的問題. 同步機制 muduo庫中有一個關於同步機制的封裝,我這裏就直接採用

原创 開始讀redis的源碼了

Redis是一個很簡單的nosql類型的數據庫,代碼量相對來說是比較少的.但是代碼風格確實比較漂亮. 我打算花一段時間剖析一下它的代碼,不光是看啦,看的話,收穫是不大的.我打算從Redis那紛繁複雜,令人眼花繚亂的代碼裏剝出一個單機的數

原创 quagga相關代碼的閱讀

最近的工作涉及到了rip和ospf兩個相關的協議,雖然僅僅是修兩個bug,但是個人還是對這兩個協議是如何實現的產生了很濃厚的興趣。因此,就抽了一段時間讀了一下quagga的源碼。 相比於我之前讀的ovs相關的代碼,quagga的代

原创 8021x認證以及portal認證的參考資料

最近幾個月一直在閱讀和認證相關的東西,到如今,也基本上將認證的流程摸得比較清楚了,所以在這裏寫一篇文章,記錄一下自己的心得,同時也給希望瞭解這些認證的同學一些參考資料。(說實話,在沒有別人的幫助下,自己一個人去琢磨各種代碼是很痛苦

原创 一起來寫web server 04 -- 線程池版本

從這個版本開始,後面的代碼差不多是越來越難啦. 這個版本,我們主要是要實現一個線程池版本的web server.這個版本的設計出自UNP. 思想 思想非常簡單,那就是父線程首先構建n多子線程,這些子線程全部爭搶全局的一把鎖,只有

原创 一起來寫ftp server 02 -- 一次失敗的嘗試

上一個版本之中,最基本的功能已經實現了,但是可以明顯地看得到, CmdHandle這個類過大,而DataHandle這個類又過小,所以,我想平衡一下,將CmdHandle這個類的數據傳輸部分分散至DataHandle這個類中,起

原创 numpy點滴

numpy點滴 這篇博文會陸陸續續更新的,因爲numpy這個東西,還是熟一點的話,會更加得心應手. 約定 後面的東西中,都已經假設我們做了如下的導入: import numpy as np 1. 構建一個對稱矩陣 其實並沒有很好的

原创 python單元測試

     說實話,我寫了這麼久的代碼,真正寫起來讓人感覺非常舒爽的語言,不多,python算是一門,和其他強類型的語言相比,python是在是靈活的很,編碼的各種範式你都可以用,缺點也顯而易見,就是太靈活,有時候錯誤是埋藏在深處的,你很可

原创 一個簡易的語法分析器

寫一個Parser其實是很簡單的一件事情.你之所以會覺得困難,是因爲你對這個東西並沒有足夠深入的瞭解.又或者說,你被龍書上那堆深奧的理論嚇到了. 如果你某一天頭腦發熱,想寫一個Parser了,我推薦給你一些好東西,首先是輪子哥的博

原创 N皇后問題的位移解法

N皇后問題 以八皇后爲例,在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,皇后可以在其所在位置的對應的行,列,對角線,反腳線上發動攻擊,請問一共有多少種擺法. 如果我們將這裏的8拓展一下,變成N,那麼這個問題就變成了N皇后問

原创 一起來寫ftp server 03 -- 加強版本

這一次的版本我們在第一版的基礎上添加了一些有意思的東西,增強了我們的功能. 下載限速和上傳限速 代碼的實現裏有一些很有意思的地方,下載限速和上傳限速就是其中一例,這些東西聽起來非常高大上,可是如果你真的做了的話,會發現這些東西真

原创 一起來寫ftp server 01 -- 簡易版本

一些坑,踩了就好了. 寫這個ftp server只是爲了練一下手,寫這種文章只是想記錄一下我在編寫這個ftp server的過程中的一些想法和收穫.雖然編寫這個玩意有點耗時,但是有一些坑,你不踩,你永遠都不知道. 我們應該用

原创 一起來寫web server 07 -- 單線程非阻塞IO加強版本

這次的這個版本相對於前面的第6個版本有些許加強,那就是將epoll由LT模式變成了ET模式. 對於採用了LT工作模式的文件描述符,當epoll_wait檢測到其上有事件發生並且將事件通知應用程序後,應用程序可以不立即處理該事件

原创 一起來寫web server 06 -- 單線程非阻塞IO版本

阻塞IO的效率是在是低下,你如果要寫高性能的web server的話,你必須使用非阻塞IO. 非阻塞IO的讀寫 在談到非阻塞IO之前,必須先談一談阻塞IO,在網絡編程中,我們假設有一個監聽套接字的sockfd,這個sockfd是