原创 Linux內核同步方法——自旋鎖(spin lock)

自旋鎖    Linux的的內核最常見的鎖是自旋鎖。自旋鎖最多只能被一個可執行線程持有。如果一個執行線程試圖獲得一個被已經持有(爭用)的自旋鎖,那麼該線程就會一直進行忙循環-旋轉-等待鎖重新可用要是鎖未被爭用,請求鎖的執行線程就可以立即得

原创 Linux內核同步方法——信號量

信號量    Linux中的信號量是一種睡眠鎖。    如果有一個 任務試圖獲得一個不可用(已經被佔用)的信號量是,信號量將會將其推進一個等待隊列,然後讓其睡眠。這時處理器能重獲自由,從而去執行其他代碼。當持有的信號量可用(被釋放)後,處

原创 golang結構體偷懶初始化

運行一段程序,警告: service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingMysqlMongodbRecord

原创 Linux內核同步方法——互斥鎖

互斥鎖“互斥體(互斥)”指的是任何可以睡眠的強制互斥鎖,比如計數是1的信號量。    也就是說,互斥體是一種互斥信號。    互斥在內核中對應數據結構互斥,其行爲和使用計數爲1的信號量類似,因爲是直接調用的信號量的操作接口,實現更高效,而

原创 併發

Go語言的併發是是指goroutine運行時是相互獨立的,能讓某個函數獨立於其他函數運行。併發不是並行。並行是讓不同的代碼片段同時在不同的物理處理器上執行。並行的關鍵是同時做很多事情,而併發是指同時管理很多事情,這些事情可能只做了一半就被

原创 Go Stack Trace

package main import "fmt" type trace struct{} func main() { slice := make([]string, 2, 4) v

原创 poll源碼剖析

Poll系統調用,是在指定時間內輪詢一定數量的文件描述符,以測試是否有就緒者。 函數原型: int poll (struct poddfd *fds, nfds_t nfds, int timeout);   · fds參數是一個poll

原创 內存管理之slab分配器

STL中的空間配置器採用一、二級配置器進行內存管理,當配置區塊    在一級配置器中,allocate()直接使用malloc(),deallocate()直接使用free(),對於內存不足的情況,模擬C++的set_new_handle

原创 Linux內存管理

1.頁    Linux的內核把物理頁作爲內存管理的基本單位。而視窗操作系統中的基本單位是進程和線程,與Linux的不同。    內存管理單元(MMU):管理內存並把虛擬地址轉換爲物理地址的硬件。MMU通常以頁爲單位來管理系統中的頁表。當

原创 字符串匹配之KMP

KMP算法 學習了數據結構之後,對KMP算法一直不是特別深入理解,在《大話數據結構》中,連續 大量的篇幅敘述,讀起來特別費勁。直到同學推薦,讀了阮一峯博主的文章之後,纔對 KMP算法真正理解,寫的特別好,自己就在這裏做個小總結。 ht

原创 epoll源碼剖析

(主要基於Linux-2.6.11.12版本進行分析。)1. 主要數據結構struct eventpoll { /* Protect the this structure access */ rwlock_t lock; /*

原创 select系統調用源碼分析

select系統調用主要對select調用過程進行一些總結,後邊也會有poll和epoll相關的一系列分析。對於分析系統調用select的源碼版本是2.6.25。select系統調用的用途是:在一段指定時間內,監聽用戶感興趣的文件描述符上

原创 事務

主要整理總結關於事務以及事務處理技術,數據庫恢復以及併發控制所帶來的問題。 事務: 一系列數據庫操作,是數據庫應用程序的基本邏輯單元。 事務是恢復和併發控制的基本單位。 在關係型數據庫中,一個事務可以是一條SQL語句、一組SQL語句或

原创 MySQL索引

索引 1. 什麼是索引 創建在表上,是對數據庫表中一列或多列的值進行排序的結構。 用於快速查詢數據庫表中的特定記錄,可提高查詢速度。 不同的存儲引擎定義了每個表的最大索引數和最大索引長度。所有存儲引擎對每個表至少支持

原创 關係型與非關係型數據庫

以下主要對關係型數據庫和非關係型數據庫進行了比較。 參考《數據庫系統概論》,《深入淺出MySQL》 以及博客https://blog.csdn.net/lijinqi1987/article/details/51823506 關係型