1. 程式人生 > >如何利用多核CPU來加速你的Linux命令 — awk, sed, bzip2, grep, wc等

如何利用多核CPU來加速你的Linux命令 — awk, sed, bzip2, grep, wc等

你是否曾經有過要計算一個非常大的資料(幾百GB)的需求?或在裡面搜尋,或其它操作——一些無法並行的操作。資料專家們,我是在對你們說。你可能有一個4核或更多核的CPU,但我們合適的工具,例如 grepbzip2wcawksed等等,都是單執行緒的,只能使用一個CPU核心。

借用卡通人物Cartman的話,“如何我能使用這些核心”?

要想讓Linux命令使用所有的CPU核心,我們需要用到GNU Parallel命令,它讓我們所有的CPU核心在單機內做神奇的map-reduce操作,當然,這還要藉助很少用到的–pipes 引數(也叫做–spreadstdin)。這樣,你的負載就會平均分配到各CPU上,真的。

BZIP2

bzip2是比gzip更好的壓縮工具,但它很慢!別折騰了,我們有辦法解決這問題。

以前的做法:

cat bigfile.bin | bzip2 --best > compressedfile.bz2

現在這樣:

cat bigfile.bin | parallel --pipe --recend '' -k bzip2 --best > compressedfile.bz2

尤其是針對bzip2,GNU parallel在多核CPU上是超級的快。你一不留神,它就執行完成了。

GREP

如果你有一個非常大的文字檔案,以前你可能會這樣:

grep pattern bigfile.txt

現在你可以這樣:

cat bigfile.txt | parallel  --pipe grep 'pattern'

或者這樣:

cat bigfile.txt | parallel --block 10M --pipe grep 'pattern'

這第二種用法使用了 –block 10M引數,這是說每個核心處理1千萬行——你可以用這個引數來調整每個CUP核心處理多少行資料。

AWK

下面是一個用awk命令計算一個非常大的資料檔案的例子。

常規用法:

cat rands20M.txt | awk '{s+=$1} END {print s}'

現在這樣:

cat rands20M.txt | parallel --pipe awk \'{s+=\$1} END {print s}\' | awk '{s+=$1} END {print s}'

這個有點複雜:parallel命令中的–pipe引數將cat輸出分成多個塊分派給awk呼叫,形成了很多子計算操作。這些子計算經過第二個管道進入了同一個awk命令,從而輸出最終結果。第一個awk有三個反斜槓,這是GNU parallel呼叫awk的需要。

WC

想要最快的速度計算一個檔案的行數嗎?

傳統做法:

wc -l bigfile.txt

現在你應該這樣:

cat bigfile.txt | parallel  --pipe wc -l | awk '{s+=$1} END {print s}'

非常的巧妙,先使用parallel命令‘mapping’出大量的wc -l呼叫,形成子計算,最後通過管道傳送給awk進行彙總。

SED

想在一個巨大的檔案裡使用sed命令做大量的替換操作嗎?

常規做法:

sed s^old^new^g bigfile.txt

現在你可以:

cat bigfile.txt | parallel --pipe sed s^old^new^g

…然後你可以使用管道把輸出儲存到指定的檔案裡。

轉自於:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/

相關推薦

如何利用CPU加速Linux命令awk, sed, bzip2, grep, wc

你是否曾經有過要計算一個非常大的資料(幾百GB)的需求?或在裡面搜尋,或其它操作——一些無法並行的操作。資料專家們,我是在對你們說。你可能有一個4核或更多核的CPU,但我們合適的工具,例如 grep, bzip2, wc, awk, sed等等,都是單執行緒的,只能使

python的線程為什麽不能利用CPU

虛擬 pytho 能夠 並發 我們 就是 比較 inter 情況 python 為什麽不能利用多核CPU GIL: (1)其實是因為在python中有一個GIL(Global Interpreter Lock),中文為:全局解釋器鎖。 1、是最開始python為了數據安全設

python學習筆記- day10-【問題: python為什麽python的線程不能利用CPU?】

例如 currency 視頻 stat 解碼 核心數 __name__ args 制作 為什麽python的多線程不能利用多核CPU,但是咱們在寫代碼的時候,多線程的確是在並發,而且還比單線程快。 一、python的多線程不能利用多核CPU? 原因: 因為GIL,

為什麽python的線程不能利用CPU,但是咱們在寫代碼的時候,線程的確是在並發,而且還比單線程快。

全局 睡眠 read 處理 sleep roc 需要 寫代碼 強制 python裏的多線程是單cpu意義上的多線程,它和多cpu上的多線程有著本質的區別。單cpu多線程:並發多cpu多線程:並行內部包含並發 首先強調背景: 1、GIL是什麽?GIL的全稱是Gl

python單程序能否利用cpu的測試結論

在很早的時候,就聽網上的文章說: python有GIL,所以在單程序內,即使使用多執行緒也無法利用到多核的優勢,同一時刻,python的位元組碼只會執行在一個cpu上。 以前也是奉為真理,直到今天在對自己的python server做效能測試的時候,發現一個python程序的c

淘寶面試題:如何充分利用CPU,計算很大的List中所有整數的和

引用 前幾天在網上看到一個淘寶的面試題:有一個很大的整數list,需要求這個list中所有整數的和,寫一個可以充分利用多核CPU的程式碼,來計算結果。 一:分析題目從題中可以看到“很大的List”以及“充分利用多核CPU”,這就已經充分告訴我們要採用多執行緒(任務)進行

【好文】淘寶面試題:如何充分利用CPU,計算很大的List中所有整數的和

引用 前幾天在網上看到一個淘寶的面試題:有一個很大的整數list,需要求這個list中所有整數的和,寫一個可以充分利用多核CPU的程式碼,來計算結果。 一:分析題目 從題中可以看到“很大的List”以及“充分利用多核CPU”,這就已經充分告訴我們要採用多執行緒(任務)進行

python執行緒為什麼不能利用cpu

利用 ctypes 繞過 GIL ctypes 與 Python 擴充套件不同,它可以讓 Python 直接呼叫任意的 C 動態庫的匯出函式。你所要做的只是用 ctypes 寫些 python 程式碼即可。最酷的是,ctypes 會在呼叫 C 函式前釋放 GIL。所以,我們可以通過 ctypes 和 C 動

如何充分利用CPU,計算很大的List中所有整數的和

引用 前幾天在網上看到一個淘寶的面試題:有一個很大的整數list,需要求這個list中所有整數的和,寫一個可以充分利用多核CPU的程式碼,來計算結果。 一:分析題目從題中可以看到“很大的List”以及“充分利用多核CPU”,這就已經充分告訴我們要採用多執行緒(任務)進行

Python怎麼利用cpu

利用 ctypes 繞過 GIL ctypes 與 Python 擴充套件不同,它可以讓 Python 直接呼叫任意的 C 動態庫的匯出函式。你所要做的只是用 ctypes 寫些 python 程式碼即可。最酷的是,ctypes 會在呼叫 C 函式前釋放 GIL。所以,我們可以通過 ctypes 和 C 動

linux top命令查看內存及CPU的使用講述【轉】

http 最小 文件 改變 總計 href 獲取 gif www. 轉載一下top使用後詳細的參數,之前做的筆記找不見了,轉載一下,作為以後的使用參考: 原文地址:http://blog.csdn.net/linghao00/article/details/8059244

linux top命令檢視記憶體及CPU的使用

檢視多核CPU命令 mpstat -P ALL  和  sar -P ALL  說明:sar -P ALL > aaa.txt   

Linux top命令檢視CPU每個核心的使用率

op命令是linux下常用的工具,可以檢視各個程序的CPU使用情況。先看一個例項:這是Ramnode雙核VPS的top顯示結果:左上角可以看到CPU的使用率是11.3%,但是看下面的程序,plugin-containe就佔用了17.6%。出現這樣的情況是因為11.3%指的是所

CPU利用測試

一直在想程式上是否特意讓執行緒在指定的CPU上去執行,這樣可以提高執行效率,所以特地寫個程式碼讓CPU使用率畫正弦曲線的實驗,我使用的是AMD X4 641的CPU,為四核四執行緒的片子。 程式碼如下 #include "stdafx.h" #include <i

Java執行緒通過多CPU提升速度--更快的執行

全文翻譯自15L大神 方案1:單執行緒 假設有個請求,這個請求服務端的處理需要執行3個很緩慢的IO操作(比如資料庫查詢或檔案查詢),那麼正常的順序可能是(括號裡面代表執行時間): a、讀取檔案1  (10ms) b、處理1的資料(1ms) c、讀取檔案2  (10ms)

Zabbix通過SNMP監控CPU使用率時, 計算CPU平均使用率

mes ces zabb ext 觸發器 trend times http sso 環境:沒有Agent,只能通過SNMP監控時,需要獲取多核CPU的平均使用率。 ZABBIX的使用SNMP監控CPU使用率時,由於設備都是多核CPU,監控的都是單獨某一核心的使用率,但單獨某

為什麽利用個域名存儲網站資源會更有效?

域名 緩存 blog size ges nbsp 防止 ont 宋體 為什麽利用多個域名來存儲網站資源會更有效? 三個最主流的原因: 1. CDN緩存更方便。 2. 突破瀏覽器並發限制。 3. Cookieless, 節省帶寬,尤其是上行帶寬 一般

CPU上python線程並行的一個假象

llb 使用 發展 重要 multi 定律 依賴 並發 操作 引用鏈接:http://www.cnblogs.com/pengyingh/articles/6586760.html GIL 與 Python 線程的糾葛 GIL 是什麽東西?它對我們的 python 程序會產

Zabbix監控CPU

cto RoCE http size mage f11 cover 空格 建圖 服務器的cpu核心數不同,需要對服務器性能的監控需要對cpu各個核心進行監控。1、創建搜索規則自動發現服務器上所有CPU核心數鍵值名為:system.cpu.discovery2、創建監控項原型

查看系統cpu性能top和cpu使用性能

sta 情況 top 查看系統 系統 停止 排序。 性能 內存 1、使用top查看系統當前負載情況。 在顯示過程 按P會按照cpu使用率排序,按M會按照內存占用率排序。 2、多核CPU上,每個核的使用率,使用 mpstat mpstat -P ALL 1