多執行緒操作磁碟

2021-06-19 08:13:42 字數 669 閱讀 6221

最近要寫乙個多執行緒的應用,需要從幾十塊磁碟中讀取資料,每次只將5塊盤中的資料進行加工整合,而且磁碟的讀取都是隨機的,不是順序的。加工後需要將結果寫入乙個大的儲存中,n個t。

原來我寫的是單執行緒的,速度好慢1分鐘只能處理3g左右或者不到。業務做起來相當的費時費力,leader叫我改多執行緒,一時間沒有好的設計,總是有乙個坎過不了,leader還給我列出了高數,算算極限時間,呵呵。

兩天的時間裡,我在不停的想挖想,**敲哇敲,沒有認真的設計下,一番失敗後,痛定思痛,先設計在寫**。

設計中,我針對n個磁碟開了n的讀執行緒,n>=24,乙個寫執行緒,乙個管理執行緒。每個磁碟中我將各自跳轉的位置加到各自的佇列裡面。每個讀執行緒設定了20個緩衝,先讀執行緒中 不斷的對這20個緩衝進行填充。

寫執行緒 在寫執行緒中有20個緩衝,由管理執行緒不斷的去填充。寫執行緒在迴圈中 將可用的緩衝寫入目標磁碟。

管理執行緒,會根據條帶中需要的磁碟來進行定位,從n個磁碟中取出5個,將需要的資料取出來進行異或校驗。然後從可用的寫緩衝中獲取乙個,進行設定。

昨天設計好,換了半天來試驗測試。24個磁碟2個t的資料量,寫入乙個10多t的儲存中 花費了2.5小時。一下子速度提公升好多。

歷史的經驗教訓,一定要詳細的規劃設計好。

C 多執行緒操作

在.net和c 中編寫乙個多執行緒應用程式將非常得容易。即使對於那些從沒有用c 編寫過多執行緒應用程式的初學者,只需遵循以下這些簡單的步驟就可以實現目的。定義命名空間 在.net中,多執行緒功能是在system.threading命名空間中定義的。因此,在使用任何執行緒類之前,必須定義 system...

多執行緒併發操作

閒來無事,就搞了搞多執行緒的東西,今天就將要寫的部分東西貼到下面,僅供菜鳥學習。不多說了,直接貼 檢視 public class threadpool util extends threadgroup 向工作佇列中加入乙個新任務,由工作執行緒去執行該任務 public synchronized vo...

PHP pthreads 多執行緒操作

1 php採用安全執行緒模式進行編譯 enable maintainer zts 必須加上 configure options prefix usr local php with config file path usr local php etc enable fpm with fpm user ...