簡單幾行程式碼輕鬆實現大文字平行計算
對於大檔案的處理,可以充分利用現代計算機的多核CPU,實施多執行緒平行計算,從而達到提速的目的。然而,要在程式語言中編寫多執行緒並行程式,並不是一件容易的事。
要並行處理就需要將原始檔分段,每個執行緒處理其中一段。文字檔案一般是每一行對應一條記錄,每一行長度不一定相同。所以,不能按行數分段,因為每次都從頭遍歷,起不到提高效能的目標;若按位元組分段則不需要遍歷,但有可能分段點正好落在行的中間,造成一行被拆進兩段,導致資料錯誤。有效的解決辦法是採用自動去頭補尾的位元組分段機制,即分段開始點所在的行被捨棄,分段結束點所在的行會被補齊,這樣將確保每一段都由完整的行構成,不會有資料錯誤。另外,還有執行緒的管理和控制等問題,如果管理不當,則會出現越界的情況。
如果有集算器SPL就簡單多了,它對多執行緒平行計算進行了封裝,程式碼寫起來不僅更短而且更容易理解,這樣在獲得高效能的同時,讓程式設計師把注意力更多地放在計算的整體邏輯上,而不必糾纏於為了提高效能而採用的並行細節。用集算器SPL寫出平行計算程式碼:
|
A |
B |
C |
1 |
=file(“data.txt”) |
/原始檔 | |
2 |
fork 4 |
=A1.cursor@t(amount;A2:4) |
/分作4段並行,分別建立遊標 |
3 |
|
=B2.groups(;sum(amount):am) |
/遍歷遊標計算amount之和 |
4 |
=A2.conj().sum(am) |
/彙總每個執行緒的結果 |
文字解析的時間經常比計算要長得多,有時候只要解析能夠並行,計算本身是否並行並不重要。所以SPL對於讀取資料提供了簡單的內建並行選項,如果對資料讀取次序不關心,比如分組、求和運算就不在乎次序,可以更簡單地寫出程式碼:
|
A |
B |
1 |
=file("orders.txt").cursor@mt() |
/@m選項將自動根據系統配置決定並行的執行緒數量 |
2 |
=A1.select(month(Date)==10) |
/過濾 |
3 |
=A2.groups(ID;sum(COST*WEIGHT):VALUE) |
/分組、彙總(序列) |
其實還有很多場景需要處理大文字計算,直接用集算器SPL處理會很簡單,感興趣可以參考:
集算器也是進行檔案資料來源處理的專業工具,可以方便地進行 TXT、Excel、Xml、Json、CSV、ini 等各種檔案資料的混合計算、入庫以及匯出等工作。桌面級計算工具,即裝即用,配置簡單,除錯功能完善,可設定斷點、單步執行,每步執行結果都可檢視。語法簡單,符合人的自然思維,比其他高階開發語言更簡單。請參閱:
集算器還很容易嵌入到Java應用程式中, 有使用和獲得它的方法。
關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2691434/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩行程式碼輕鬆讓 Java 實現大文字平行計算行程Java
- 大文字平行計算實現方式
- 十幾行Python程式碼輕鬆實現txt轉xls,方便快捷Python
- Python技巧-只用一行程式碼輕鬆實現圖片文字識別Python行程
- 簡單幾步,教你在mac電腦上輕鬆啟用懸停文字!Mac
- 幾句程式碼簡單實現IoC容器
- [原始碼解析] PyTorch 流水線並行實現 (6)--平行計算原始碼PyTorch並行
- 這幾點,讓上海IT行業輕鬆實現六西格瑪管理!行業
- JavaScript簡單計算器程式碼分析JavaScript
- 簡單實現幾種常見的前端效果,附程式碼!前端
- 60行程式碼實現簡單模板語法行程
- OpenCV使用ParallelLoopBody進行平行計算OpenCVParallelOOP
- 淺談.NET下的多執行緒和平行計算(十四)平行計算前言執行緒
- 在“平行計算”中增加了幾篇文章
- 輕鬆實現SINDOWS 98動態選單 (轉)
- 注意這幾點,輕鬆實現硬碟資料恢復硬碟資料恢復
- 平行計算π值
- Oracle平行計算Oracle
- 平行計算cuda
- Python實現簡單驗證碼的轉文字Python
- 64行程式碼實現簡單人臉識別行程
- .NET神器:輕鬆實現數字轉大寫金額的秘籍與示例程式碼
- miniSipServer簡單而不簡單,輕鬆落地,實現電腦對固話、手機通訊Server
- jquery簡單計算機功能程式碼例項jQuery計算機
- jQuery實現的簡單投票簡單程式碼例項jQuery
- 大資料平行計算利器之MPI/OpenMP大資料
- 簡單計算器的程式導向實現和麵向物件實現對比物件
- 實現簡單的`Blazor`低程式碼Blazor
- tensorflowrnn最簡單實現程式碼RNN
- C++ 實現簡略計算π的程式C++
- 8行程式碼實現快速排序,簡單易懂圖解!行程排序圖解
- 51行程式碼實現簡單的PHP區塊鏈行程PHP區塊鏈
- GPU:平行計算利器GPU
- 輕鬆實現報表整合
- 幾種簡單的負載均衡演算法及其Java程式碼實現負載演算法Java
- 實用且簡單的Git教程,輕鬆搞定多人開發Git
- 推薦文章:多執行緒平行計算執行緒
- 完數的Java多執行緒並行程式設計-平行計算Java執行緒並行行程程式設計