對於計算密集型的任務,乙個有ncpu個處理器的系統通常通過使用乙個ncpu+1個執行緒池來獲得最優的利用率。
對於包含了io和其他阻塞操作的任務,不是所有的執行緒都會在所有的時間被排程,因此需要乙個更大的池。2*ncpu
nthreads = ncpu x ucpu x (1 + w/c)其中,
ncpu = cpu核心數
ucpu = cpu使用率,0~1
w/c = 等待時間與計算時間的比率
執行緒數 = ncpu / (1 - 阻塞係數) = ncpu x (1 + w/c)
在mysql中行級鎖並不是直接鎖記錄,而是鎖索引。innodb行鎖是通過給索引項加鎖實現的,索引分為主鍵索引和非主鍵索引兩種,如果一條sql語句操作了主鍵索引,mysql就會鎖定這條主鍵索引;如果一條語句操作了非主鍵索引,mysql會先鎖定該非主鍵索引再鎖定相關的主鍵索引。如果沒有主鍵索引,innodb會通過隱藏的聚簇索引來對記錄加鎖。也就是說:如果不通過索引條件檢索資料,那麼innodb將對錶中所有資料加鎖,實際效果跟表級鎖一樣。
疏漏總結 二十一
使用者態和核心態。處於使用者態執行時,程序所能訪問的記憶體空間和物件受到限制,其所處於占有的處理器是可被搶占的 處於核心態執行時,則能訪問所有的記憶體空間和物件,且所占有的處理器是不允許被搶占的。redis pipline 客戶端將執行的命令寫入到緩衝中,最後由exec命令一次性傳送給redis執行...
疏漏總結 二十三
change buffer change buffer的最主要目的是將二級快取的結果儲存下來,減小二級索引隨機io的延遲與消耗,這裡注意二級索引和聚簇索引又不一樣,因為二級索引有可能是不唯一的。當我們執行更新語句的時候,像insert update delete這種語句,在使用了之後,會更新二級索引...
疏漏總結(八) 執行緒池
先從構造方法裡面的引數開始說。corepoolsize 核心執行緒數 核心執行緒是一定會存在著的執行緒,也就是說,如果你設定了假如說5,那麼不管這五個執行緒有沒有任務,都會被建立出來。queuecapacity 阻塞佇列 當核心執行緒數被使用到了最大值後,新任務如果還需要建立執行緒,就會進入阻塞佇列...