本文在我的部落格《查理的書架》最早發布,並在第一時間更新到51cto的《nathan的技術空間》上。
這是我整理p2psim這個**軟體包的第二篇筆記。第一篇是《p2psim在g++ 4.3下的編譯》,在第一篇裡面介紹了p2psim 0.3在編譯和按照中的碰到的問題以及解決方式。本篇主要給出p2psim的實現架構,幫助需要進行**分析的朋友對p2psim能有個大體的構架了解。在些這篇時候,作者也還未完成對整體**的通讀,所以對全域性的掌握還不充分,如有錯誤,請各位指出和包涵。
p2psim簡述
這是乙個比較簡單的p2p模擬軟體包,是mit的乙個老兄搞的玩也。在2023年出了最後一版0.3後再沒更新了。需要的朋友可去
首先是p2psim的實現基礎。這個軟體包的實現是基於單程序多工方式工作的。他本質上是基於乙個叫libtask的c語言軟體包來實現在單個程序內進行多個任務的排程和切換。這個包在他的源**的/libtask目錄下。 這個包是mit開發的,目前在google code的**上有登記,位址是
可以在這個**上查到這個庫的基本api的說明。可以直接看這個說明來理解這個庫的實用,而不需要去看/libtask目錄下的**來分析到底這個庫在做什麼。此外,在p2psim裡面,作者把這個庫封裝到了threadmanager和thread兩個類。前者threadmanager用來封裝全域性的task的pool的,而後者封裝了各個task的api。這樣p2psim就實現了c++這級的多任務排程。
其次,我把kikikind老兄的類繼承圖重新貼一遍,來幫助大家理解程式架構。在這個圖裡面,我們看到從threaded類一共派生出eventqueue, network,和eventgenerator三個類,這三個類就是程式在執行時候的3個主要併發任務。
至於圖中的其他部分,等以後的具體分析的時候再慢慢說明。
因此,綜上所述,p2psim是乙個根據libtask所提出的架構所寫的乙個程式,因此在/p2psim目錄下,main.c程式裡面沒有main函式,而是taskmain函式,這個函式會被libtask作為第乙個task而呼叫啟動,功能類似main函式,連呼叫引數都差不多。然後在這個taskmain中,間接建立了上述其他幾個併發任務。
到這裡,讀者應該對p2psim的大體構架有個簡單認識了。 下次我打算把taskmain函式裡面的初始化順序介紹一下。
P2P閱讀筆記
1 full cone nat socket nat會給其分配乙個公網 publicip publicport socket向外面任何主機傳送資料都將使用這對 publicip publicport 任何主機只要知道這個 publicip publicport 就可以傳送資料給 publicip p...
架構周閱讀筆記2
餘額寶使用者數達到接近國人數量的1 4,日交易峰值可以達到兩億筆,最大併發數可以達到每秒五千筆。餘額寶創新來說,業務上的創新,他對t 0發揮到極致,是現金管理工具,是底層賬戶。還有就是嵌入式直銷,把貨幣 嫁接到支付寶去。技術創新包括 直銷和ta清算的整合。交易的簡化。餘額寶是核心業務在雲上執行的系統...
RNA Seq分析筆記(2)
檔案分割 使用下面命令將srr分割開來。fastq dump gzip split 3 srr3589956.sra done生成之後,結果如下 biochem qcgate step3 hisat2 ls gz l rw rw r 1 biochem biochem 1223462176 nov ...