使用多线程会加快文件读取速度吗?
使用多線程去讀取文件的話會加快讀取速度嗎?
同樣如果在面試中問你這個問題該怎么回答呢?假設有一個文件大小為10G,我們需要將其讀取到內存中(假設內存能容納下該文件),那么使用多個線程分塊去讀取的話會加快讀取速度嗎,比如我們創建兩個線程,一個線程讀取前5G數據;另一個線程讀取后5G數據,這會比只是用一個線程將其讀入內存快嗎?
先說答案,對于機械磁盤,使用多個線程去讀取文件通常是一個bad idea。
為什么?
為什么使用多個線程去讀取文件通常是一個bad idea呢?
原因就在于雖然我們可以使用多個線程來充分利用多個CPU核心,但是不要忘了,磁盤只有一個。
因此簡單的使用多個線程并不能加快文件的讀取速度。這就好比一個餐館,這個餐館中有多個服務員,但是只有一個廚師;服務員下單很簡單,即一句話的事兒,但是廚師做一道菜出來是需要很多時間的,一個服務員下的單就夠廚師忙的了,多個服務員同時下單并不能提高廚師的產出。
在這里服務員就好比CPU,廚師就好比磁盤。
實際上使用多個線程來讀取文件可能會使得情況更加糟糕,這就涉及到了對磁盤結構的理解。
理解磁盤
當然,這里的磁盤是指的機械磁盤,這類磁盤需要把磁頭放到正確的磁道上,接著等待相應的扇區轉到該磁頭下才可以讀取磁盤數據。
因此磁盤中最耗時的其實并不是把數據從磁盤讀取到磁頭,最耗時的其實是把磁頭移動到正確的磁道上,這個步驟最耗時,有的同學可能會有疑問,為什么這個步驟是最耗時的呢?
不要忘了,我們說的是機械磁盤,磁頭的移動相對電子的速度是極慢的,使用多個線程來讀取文件的話,磁頭可能要在不同的磁道間來回移動以滿足各個線程的文件讀取請求,這個過程對磁盤性能的影響是非常大的。
現在你該知道為什么多線程讀取文件不會加快讀取速度了吧。
最佳實踐
理解了磁盤的原理之后我們就明白了,實際上磁盤的順序讀取才是最快速的,這就是為什么我們把2G的電影copy到磁盤的速度要遠遠快于把2G的多個文件copy到磁盤的速度快很多的原因。
因此比較好的辦法就是使用一個線程來讀取一個大文件,要想加快數據處理速度可以等文件讀取完成后使用多個線程來處理這些已經加載到內存中的數據。
SSD磁盤
待續。。。
RAID10磁盤
待續。。。
總結
一個看似簡單的問題其實往往并不是我們想的那么容易,這涉及到了對磁盤理解,只有對計算機各個系統有了一個透徹的理解后,解決問題才能從關鍵著手。
總結
以上是生活随笔為你收集整理的使用多线程会加快文件读取速度吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows下安装部署DBeaver连
- 下一篇: 通信协议选型(待)