2016-11-30 44 views
2

我有Swift3一個控制檯應用程序,從非常大file.txt的(〜200GB)逐行讀取:斯威夫特多線程控制檯應用程序

guard let reader = LineReader(path: "/Path/to/file.txt") else { return; } 

for line in reader { 
    // do something with each line  
} 

大約需要8個小時以上,從文件中讀取的所有數據。我的服務器有6個硬件核心,如何在6個線程中讀取這個文件?從這裏

LineReader:https://github.com/andrewwoz/LineReader

PS。從一開始的文件每個文件分開1GB。

+0

更新的問題。 –

+6

第1步:不要製作200GB的txt文件 – Alexander

+2

多線程這將需要你有一個安全的方式將文件分割成多個塊來分開處理。鑑於你的文件的佈局,這可能嗎? – Alexander

回答

0

!!! https://github.com/andrewwoz/LineReader

let reader = LineReader(path: pathToFile) 
var threads = [Thread]() 

func readTxtFile() { 
    while let line = reader?.nextLine { 
    autoreleasepool { 
     // To do with each line 
    }} 
} 

for threadNumber in 0...threadsCount-1 { 
    threads.append(Thread(){ readTxtFile() }) 
    threads[threadNumber].start() 
} 

select(0, nil, nil, nil, nil) 

另外,實時的利潤只與硬件核心,不是HT線程:只有當你使用POSIX fopen()函數喜歡這裏讀文件此解決方案。如果您的CPU有2個內核和4個線程,請在代碼中使用2個線程。

0

從來沒有想過多線程讀取200GB的.txt文件,但我可能會讓控制檯檢測有多少個核心(e.x. 6core)可用並將其拆分爲(e.x. 6parts)。 ( - >每個進程的一部分) 據我所知,Ubuntu會自動均勻地分配給進程。 希望這可以幫到

+0

您。你能否幫忙,不明白你打算如何執行6個流程? –