2014-10-08 66 views
6

我一直在我的剖析與mutrace代碼,並具有以下有趣/令人擔憂的結果:堆棧展開是否真的需要鎖定?

Mutex #1260690 (0x0x7f87bc8eea40) first referenced by: 
    /usr/lib/mutrace/libmutrace.so(pthread_mutex_lock+0x49) [0x7f87be0b76b9] 
    /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Find_FDE+0x26) [0x7f87bc6eb0e6] 

mutrace: Showing 10 most contended mutexes: 

Mutex # Locked Changed Cont. tot.Time[ms] avg.Time[ms] max.Time[ms] Flags 
1260690 19066789 1509831 109753  3600.883  0.000  0.226 M-.--. 

_Unwind_Find_FDE似乎有應付堆棧展開。

我的應用程序是高度多線程的,具有相當嚴格的延遲要求,所以我想盡可能簡單地將其消除。是否有任何編譯器或環境設置可用於擺脫此函數調用,而無需重寫我的代碼?我們的流程控制部分使用了異常(可能不明智),但修復該問題會是一個很大的重構工作。

g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2 
+2

_「我們確實在流量控制中使用了例外情況_」然後你必須付出這個代價(並且你很幸運沒有人會把石頭扔到你的windows LOL上) – 2014-10-08 12:53:12

+4

不幸的是我想你會有解決您的錯誤,並且不要在熱路徑中使用流量控制的例外情況。其他任何東西都是黑客。 – 2014-10-08 12:54:18

+3

異常應該*不*是正常程序流程的一部分,它們應該是*例外*。如果你拋出異常,嚴格的等待時間要求並不是那麼嚴格,因爲堆棧展開通常效率不高。 – 2014-10-08 12:54:56

回答

-3

如果您需要低延遲,請停止使用異常。

+0

如果不引發異常,則不影響運行時。例外情況下,可以安全地實現低延遲。 – Alex 2014-11-11 12:32:21

+0

如果超出延遲要求,請停止使用「慢速」異常。一個好的實現不需要有「緩慢」的例外。如果你的實現不好,那麼...... – 2014-11-11 18:17:03