多執行緒中記憶體分配的一些看法

2021-05-23 01:55:54 字數 472 閱讀 2276

近來開發乙個儲存系統,在開發的過程中遇到一些之前沒有考慮過的問題,讓人記憶比較深刻的算是多執行緒中反覆申請與釋放記憶體。由於這個系統需要很強的穩定性,這就讓我很痛苦了一兩個星期。

大家都知道在c++中用new 來分配記憶體,用delete 來釋放記憶體,這看似沒有任何問題,因為new與delete總是成對出現,且申請後和刪除前都會做判斷,理論上不會出現任何問題,實際上也沒有出現任何問題。但這是一般情況,作為乙個應用程式來說,不需要連續執行一周或者乙個月。

但作為乙個大併發的儲存系統,需要的是長時間的穩定與效能,反覆的new與delete後,就會出現記憶體碎片,在程式執行一周後,變的很慢,最後崩潰,程式崩潰,咱們也跟著崩潰,因為實在是找不出任何錯誤。後來反覆的思考,想到了記憶體碎片的可能。

往往就是這樣,找到問題並解決問題更難,我們找到,所以很快的就解決了,幾行**的事情。

每次在分配記憶體前,都檢查一下要分配的記憶體是否是4k的整數倍,如果不是,則湊齊。如果是也同樣加上4kb。

多執行緒(6) 提高鎖效能的一些看法

鎖是最常見的同步方法之一,在高併發環境下,激烈的的鎖競爭導致程式的效能下降,因此我們有必要討論一些有關鎖的效能問題,以及一些注意事項,比如避免死鎖等。為了降低鎖的競爭導致程式效能下降的話,可以用以下建議提高一下效能。1.減少鎖持有時間 對於使用鎖進行併發控制的應用程式而言,在鎖競爭過程中,單個執行緒...

關於多執行緒程式中鎖定記憶體的一些介紹

避免同時訪問 為了避免與其他執行緒在訪問乙個全域性物件貨變數時發生衝突,需要在執行執行緒 時鎖定其他執行緒的執行,直至完成操作。vcl支援三種技術來達到這個目的 1 鎖定物件 有些物件自己有鎖定的功能,如canvas 2 使用critical區 如果物件沒有提高內建的鎖定功能,需要使用critica...

java中多執行緒的一些知識

countdownlatch,乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。主要方法 public countdownlatch int count public voidcountdown public voidawait throws interrup...