思考:如果不考慮多執行緒,分布式的話,要高效的毒如和寫出大檔案,主要是解決:1.讀檔案和寫檔案的磁碟io問題,通過批量讀取和批量寫出來實現。2.stringbuffer,和演算法問題
/*
* 1.該方法實現了批量輸入,批量輸出。
* 輸入檔案大小:15g(31036260行),輸出檔案大小:4.1g(31036260行),insize=200m,outpercount=10000
* --begin:2017-06-16 11:26:46--
* --end:2017-06-16 11:49:41--
* 總耗時:22min55sec
* * 1.該方法實現了批量輸入,批量輸出。
* 2.新增了stringbuffer。
* 輸入檔案大小:15g(31036260行),輸出檔案大小:4.1g(31036260行),insize=200m,outpercount=10000
* --begin:2017-06-16 18:30:33--
* --end:2017-06-16 18:39:58--
* 總耗時:9min25sec
* * 1.該方法實現了批量輸入,批量輸出。
* 2.新增了stringbuffer。
* 輸入檔案大小:15g(31036260行),輸出檔案大小:4.1g(31036260行),insize=200m,outpercount=100000
* --begin:2017-06-16 18:53:47--
* --end:2017-06-16 19:03:28--
* 總耗時:9min41sec
* * 1.該方法實現了批量輸入,批量輸出。
* 2.新增了stringbuffer。
* 輸入檔案大小:15g(31036260行),輸出檔案大小:4.1g(31036260行),insize=400m,outpercount=10000
* --begin:2017-06-16 20:56:26--
* --end:2017-06-16 21:05:33--
* 總耗時:9min07sec
* */
private void jsontotxtbigfilehiho1(string args) else
stringbuffer outrow = new stringbuffer();
stringbuffer outblock = new stringbuffer();//儲存資料塊的資料
int i = 0;
// int j = 0;
int percount = 10000;//每一萬行磁碟io寫一次
int presize = 400 * 1024 * 1024;//讀入的資料塊大小
jsonparser parser = new jsonparser(); // 建立json解析器
try
// outrow.re = outrow.replace("\"", "");
}if (outblock.length()>0)
//****
//開始批量寫出資料
//****
if(i>=percount)
}//****
//最後一次批量寫出資料
//****
if(outblock.length()>0)
in.close();
fw.flush();
fw.close();
} catch (ioexception ex)
system.out.println("--end:"+df.format(new date())+"--");
}
php 單執行緒
php 從設計之初到流行起來都沒有出現明顯需要用多執行緒才能解決的需求。某些需要用到多執行緒的地方也有相應的解決方案和替代方案。多執行緒並不總是比單執行緒優,多執行緒可能會引入其他問題 例如 兩個執行緒同時呼叫乙個類裡的同乙個方法時,可能出現死鎖的情況 每個 php 檔案的執行是單執行緒的,但是,伺...
Redis單執行緒
redis 的單執行緒主要是指 redis 的網路 io 和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。當多個客戶端發起命令,這些命令併發執行時,在redis內部,會排隊逐個執行,也就是執行命令的那個操作是由乙個執行緒執行的。但 redis 的其他功能,比如...
單執行緒時代
了解了 reactor 模式後,你可能會有乙個疑問,這個和我們今天的主題有什麼關係呢。可能你不知道的是,redis 是基於 reactor 單執行緒模式來實現的。io多路復用程式接收到使用者的請求後,全部推送到乙個佇列裡,交給檔案分派器。對於後續的操作,和在 reactor 單執行緒實現方案裡看到的...