當前位置:編程學習大全網 - 行動軟體 - 在Linux系統中使用Shell實現多線程運行任務(多任務並發執行) 2022-05-30

在Linux系統中使用Shell實現多線程運行任務(多任務並發執行) 2022-05-30

最近,有壹批任務需要把兩批的fastq合並到壹起並壓縮成壹個fastq文件才能繼續往下做,由於存儲空間有限又不能直接全部跑上,只能按樣本逐個分批跑。眾所周知,壹般fastq是成對存在的,所需要對read1和read2分別合並壹次,然而這次任務的fastq文件比較大,合並然後壓縮壹次需要1天左右,那對於壹組fastq就要2-3天,這也太耗時間了,所以我在想能不能read1和read2 同時跑上,這就可以節省壹半的時間了。

平時也能遇到很多類似的任務,特別是在進程數有限的情況下,如果這些小任務單獨占用壹個進程,而任務很多就很耗時間,如果能在壹個進程下實現多個線程並行執行,就能大大提高運行效率。關於進程和線程的知識可以參考知乎的這篇文章 Shell“ 多線程”,提高工作效率 ,整理的也比較有條理,能比較容易讀懂。

當然,某些博主也寫過類似的文章,例如這篇 shell後臺限制多並發控制後臺任務強度進行文件拷貝 但是實在是太高深莫測了,看不懂,壹時半會兒也學不會。本文將示例Shell實現多線程的簡單版本,其實不用太復雜。

其實只需要兩個步驟, 第壹步是給需要並行運行的命令行在結尾加上"&",代表放到後臺運行,第二步是在在所有並行任務的後面加上壹句“wait”,意思是等所有通過“&”放到後臺運行的任務跑完後再繼續執行後面的任務 ,這些就能實現所有帶有“&”的行並行執行了。

看完腳本是不是覺得很簡單?

上面的腳本適合並行任務少的,可以手動加&和wait,但是如果有幾十個甚至上百個的小任務就比較麻煩了。但不用擔心,可以寫個循環,批量運行。

循環的結果也是跟上面類似的,只是多了個循環結構。

如果需要執行的任務只有壹行,可以把大括號去掉。

關於for和while的循環可以查看之前的文章 Shell常用循環示例(for和while批量處理)2022-05-25

需要註意的是多線程並行還是需要有限制的,畢竟都是在壹個進程裏運行,如果線程太多了會卡頓的,建議控制在100個以內,當然還有畢竟高級和復雜的方法可以實現限制。因為上面的腳本已經夠我用了,沒繼續往下學,以後可以再補充。

  • 上一篇:今天滄州的天氣預報?
  • 下一篇:完整頁wow主教議會聲望軍需官在哪裏,有什麽獎勵
  • copyright 2024編程學習大全網