2011-10-11 156 views
1

哪一個是一般鎖定互斥鎖和在C++中執行磁盤讀取之間更有效?鎖定互斥鎖vs訪問磁盤

如果它取決於我正在運行的系統,有什麼好方法來檢查它?會做100萬個鎖與100萬個磁盤讀取工作?

+1

不確定這個問題的背景。在沒有爭用的情況下,互斥鎖將成爲內核調用和後退。從硬盤讀取的無緩衝磁盤意味着用戶>內核>驅動程序> SATA>控制器>移動機械師/ waitingForSector,然後再返回,如此冗長。你能用更多的上下文來改進你的問題嗎? –

+0

@MartinJames:無爭議的互斥鎖甚至可能不涉及內核調用 - 在現代Linux中,它只是在用戶空間中測試並設置一個標誌。 –

+0

電話放映問題? :) – blaze

回答

5

一般來說,互斥操作比比磁盤讀取更快。這是因爲他們的預期目的需要最高速度。事實上,我很可能會暗示的任何內存操作都可能比磁盤操作更快。

當然,在磁盤信息被緩存在內存中的情況下可能會出現奇怪的邊緣情況,並且您一遍又一遍地讀取相同的字節,但這並不是真的在讀取磁盤,是不是?

如果你自己找到自己希望檢查這個(並且我會建議它並不是真的有必要),只需編寫幾個程序,第一個鎖定和解鎖一個互斥百萬次,第二個從磁盤讀取一百萬個不同的信息。

運行它們並進行比較。如果由於一些奇怪的因素,磁盤讀取回來得更快,告訴我們你的代碼,我們將解釋你做了什麼錯:-)

+1

我會想象即使對於緩存讀取,也需要某種形式的鎖定... – stefaanv

4

鎖定一個互斥體,通過。 RAM + CPU是,比即使是最快的SSD也要快得多