原创 golang UDP, 綁定和非綁定地址到socket

UDP是無連接的,也就是說理論上不區分客戶端和服務器。  服務器可以在一個端口上接收不同的客戶端。 客戶端可以先綁定服務器地址到socket上,也可以不綁定,發送和接收數據都指定服務器地址。   下面是測試代碼: package mai

原创 goalng中range和for哪個性能高?

go語言遍歷切片的時候有range,和for下標兩種遍歷方法,那麼哪種性能好呢?直覺上,range是對元素的拷貝,性能必然不如for+下標訪問效率高。且看下面的測試。   測試環境 goos: linux goarch: amd64 g

原创 golang sync.Map和map+mutex性能比較

目錄   測試環境 測試代碼 運行指令 測試結果 結論 測試環境 goos: linux goarch: amd64 go version go1.14 linux/amd64 Run on (8 X 2394.37 MHz CPU s)

原创 順口溜記23種設計模式

在學習設計模式的時候,發現有23種之多。記憶起來十分困難,所以編一個順口溜是不錯的方法。當然死記還是不夠的,但是要記死,重在理解和靈活運用。 迪廳裏開口賴單                    三廠建造單原型             

原创 一文參透 鎖,信號量,事務及分佈式事務

| 導語 宇宙一致的基礎:原子操作 一致三定律 1.存儲空間的原子讀寫操作 一個存儲空間,寫入a,一旦返回寫入成功,存儲空間中必然可以讀出a. 如果存在兩個並行寫入操作,一個寫入a,另一個寫入b。讀出的結果只可能是a,b兩種。 沒錯,這就

原创 Linux內核學習開始

      Linux是開源的操作系統,其系統所有源代碼都是開放的,這對研究操作系統是十分方便的。         Linux內核發展至今,版本特別多,比較經典的是2.6內核。所以本文以研究 2.6內核爲主。可是內核比較大,從哪裏入手是

原创 linux pid名字空間

最近看《深入理解linux內核架構》中pid名字空間一塊,略有感悟。這裏開門見山,直接來講pid名字空間是如何實現的,以及如何使用。先看一幅圖,圖中描述了所使用的數據結構和他們的關係。 首先強調圖中的幾個比較容易搞混的字段。看task

原创 linux內核調試環境構想

雖然現在64位操作系統越來越流行,但是爲了研究方便,我們還是選取32位內核研究。 而linux操作系統就多種,比較流行的有centos ubuntu等,這裏選用centos6.5-i386系統。 安裝系統時配置爲軟件開發站,方便內核編譯

原创 linux內核用戶地址空間分配與管理

linux用戶空間管理中設計一套複雜高效的數據結構 設計這些數據結構是爲了解決什麼問題呢?這些數據結構上有什麼操作呢? 這套機制爲解決以下問題? 1.已知一個進程如何知道他的虛擬內存和物理內存情況? 2.進程運行時在堆里加一塊內存怎

原创 Linux內存管理數據結構之間的關係

linux內存管理是一個相當複雜的機制,這裏只是基礎的內存管理知識結構,不包括頁面換出換入。 可以從以下角度思考問題 用戶地址空間: 用戶內存請求被認爲是不緊迫的 用戶訪問是危險的 權限控制 用戶程序典型應用: shell中運行

原创 學linux內核的一些感想

關於計算機科學與技術專業的感想 兩個月前,我突然決定看一下linux內核。作爲一個計算機專業出生的學生,我想透徹地瞭解整個計算機系統。雖然學過計算機組成原理、操作系統、編譯原理等課程,但是總感覺比較偏向理論。而我是一個注重理論與實踐相結合