編程語言&性能優化

[toc]



摘要

昨天晚上莫名其妙的頭腦風暴,凌晨4點多才睡著,腦子一直充斥這些語言:c、c++、java、python、js、php,線程、進程、網絡IO、性能等等;
重新探究事物的原理能幫助各種實踐遇到的各種疑問,這大概就理論指導實踐;
今天就來簡單聊一聊,后續再寫博客展開詳細敘述。

語言分類

  • 匯編:MASM
  • 編譯:c、c++、oc
  • 混合語言(半編譯&半解釋):java、C#
  • 解釋語言:python、ruby、perl
  • 腳本語言:js、php、asp

  1. 靜態語言:c、c++
  2. 半動態語言:java
  3. 動態語言:python、js、php、c#
  • CPU運行模式:
    • ring0:內核態(內核函數)
    • ring1:
    • ring2:
    • ring3:用戶態(非內核函數)

    ring0是指CPU的運行級別,ring0是最高級別,ring1次之,ring2更次之……

也就是,如果一個語言想要提供性能

  • 向上優化:通過編譯器,編譯為靜態;
  • 向上選擇:有利于編譯器向上優化;有利于靜態化、盡量多的運行在內核態;eg:java的JIT編譯器會將運行頻率很高的字節碼直接編譯為機器指令執行以提高性能;

多進程和多線程

為了提高程序的性能,我們一般都會采用多進程或者多線程的技術,有必要對比一下進程和線程;

  • 系統資源:進程>線程
  • 穩定性:進程>線程
  • 數據同步:線程(線程切換)>進程(進程通信)
  • 調用難度:進程>線程

通信機制

  1. 信號(Signal):信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生;
  2. 管道(pipe):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系(父子進程)的進程間使用
  3. 命名管道(FIFO):有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。
  4. 消息隊列(Message Queue):消息隊列是由消息的鏈表,存放在內核中并由消息隊列標識符標識。
  5. 共享內存(Shared Memory):共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。如信號量,配合使用,來實現進程間的同步和通信。
  6. 信號量(Semaphore):信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。
  7. 套接字(socket,基于IP):套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同主機間的進程通信。
  8. unix域套接字(socket,不基于IP):只需要在一臺機器上的兩個不同進程間通信,還要用到IP地址就有點大材小用了。

鎖和原子性

  • 互斥鎖(Mutex):見名知意;
  • 讀寫鎖(wrlock):讀不加鎖,寫加鎖;
  • 自選鎖(spinlock):while(ture),原地打轉;
  • 原子操作:最小運行單元;操作容器(atomic)

說到這個地方免不了提一下 volatile:c++、java都有這個關鍵字;

  • 知識點1: 內存屏障,c++中volatile修飾變量可以防止編譯優化;java中叫做指令重排,都是一個意思;
  • 知識點2: 線程可見:就是聲明為隨時可能發生變化,易變聲明;使用 volatile 聲明的變量的值的時候,系統總是重新從它所在的內存讀取數據,即使它前面的指令剛剛從該處讀取過數據;
  • 可重入鎖(ReentrantLock):應用級別的鎖

資源

寄存器、堆、棧、全局區、常量區

性能:寄存器>棧>堆

  • 寄存器:CPU操作;
  • 棧:內存
  • 堆:內存(用戶分配)

空間換時間

  • 內存緩存:內部、外部緩存;

LRU(least recently used): 如果一個數據在最近一段時間沒有被訪問到,那么在將來它被訪問的可能性也很小。也就是說,當限定的空間已存滿數據時,應當把最久沒有被訪問到的數據淘汰。
LFU(Least Frequently Used):最近最少使用算法。它是基于“如果一個數據在最近一段時間內使用次數很少,那么在將來一段時間內被使用的可能性也很小”的思路。LFU有更精確的統計;
FIFO: 在FIFO Cache設計中,核心原則就是:如果一個數據最先進入緩存中,則應該最早淘汰掉。也就是說,當緩存滿的時候,應當把最先進入緩存的數據給淘汰掉。在FIFO Cache中應該支持以下操作;

  • 運算(操作)靜態化:查表、映射;
  • 中間結果緩存或者預處理

池化技術

  • 內存池

靜態、動態(非固定長度)

  • 線程池

靜態、動態(多用于無狀態的web服務)

  • 連接池

數據庫、redis等連接池

數據結構

  • 數組和連續內存

高效:索引、size、遍歷、復制
低效:插入、擴容、查找

  • 鏈表和雙線鏈表

高效:端插入、遍歷、擴容
低效:size、查找

  • 紅黑樹(java treeMap)

高效:排序、找上線最近元素、查找、遍歷、擴容
低效:插入、刪除

  • size效率和實現有關系
  • 哈希

高效:海量數據插入、刪除、查找
低效:排序、size

  • 堆:大頂堆、小頂堆

高效:取最大N個元素

性能分級

  • 輕CPU(邏輯運算) > 重CPU(查找運算) > 內存交換(copy) > IO(文件、DB、網絡IO:TCP/UDP)
  • 由于IO操作實在性能低效率:于是有了IO多路復用技術;

參考


你的鼓勵也是我創作的動力

打賞地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374