仓酷云

标题: 带来一篇Bash剧本完成批量功课并行化 [打印本页]

作者: 谁可相欹    时间: 2015-1-14 20:17
标题: 带来一篇Bash剧本完成批量功课并行化
欢迎大家来到仓酷云论坛!在Linux下运转功课时,常常会碰到以下情况:有大批功课必要运转,完成每一个功课所必要的工夫也不是很长.假如我们以串行体例来运转这些功课,大概要泯灭较长的工夫;若接纳并行体例运转则能够年夜小节约运转工夫.再者,今朝的盘算机尽年夜局部都是多核架构,要想充实发扬它们的盘算才能也必要并行化.总结网上看到的材料,使用Bash剧本,能够接纳上面几种***完成批量功课的并行化.注重,上面叙述中将不会辨别历程和线程,也不会辨别并行和并发.
1.接纳GNU的paralle步伐
parallel是GNU专门用于并行化的一个步伐,关于复杂的批量功课并行化十分符合.利用parallel不必要编写剧本,只需在原下令的基本上复杂地加上parallel就能够了.以是,假如能用paralle并行化你的功课,请优先利用.有关paralle的具体申明,请参考其官方文档.
2.最复杂的并行化***:&+wait
使用Bash的背景运转&和wait函数,可完成最复杂的批量功课并行化.
以下面的代码,串行实行约莫必要10秒
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

改成上面的复杂并行代码幻想情形下可将运转工夫紧缩到3秒摆布
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

3.历程数可控的并行化***(1):摹拟行列
利用Bash剧本同时运转多个历程并没有坚苦,次要存在的成绩是怎样把持同时运转的历程数量.下面的复杂并行化***利用时历程数没法把持,因此功效无限,由于年夜多半时分我们必要运转的功课数远远凌驾可用途理器数,这类情形下若大批功课同时在背景运转,会招致运转速率变慢,并行效力年夜年夜下落.一种复杂的办理计划就是摹拟一个限制最猛进程数的行列,以历程PID做为行列元素,每隔必定工夫反省行列,若行列中有功课完成,则增加新的功课到行列中.这类***还能够制止因为分歧功课耗时分歧而发生的无用守候.上面是依据网上的代码改写的一种完成.有用性更强的代码,请参考原文.
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

一个更简便的***是纪录PID到数组,经由过程反省PID存在与否以断定功课是不是运转终了.可完成以下
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

3.历程数可控的并行化***(2):定名管道
下面的并行化***也可使用定名管道来完成,定名管道是Linux下历程间举行通信的一种***,也称为先进先出(fifo,firstinfirstout)文件.详细***是创立一个fifo文件,作为历程池,内里寄存必定数量的"令牌".功课运转划定规矩以下:一切功课列队顺次支付令牌;每一个功课运转前从历程池中支付一块令牌,完成后再偿还令牌;当历程池中没有令牌时,要运转的功课只能守候.如许就可以包管同时运转的功课数即是令牌数.后面的摹拟行列***实践就是以PID作为令牌的完成.
据我已检察的材料,这类***在收集上会商最多.完成也很简便,但了解其代码必要的Linux常识较多.上面是我改写的示例代码及其正文.
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

注重:
(1)exec6$Pfifo这一句很主要,若无此语句,向$Pfifo写进数据时,步伐会被堵塞,直到有read读出了文件中的数据为止.而实行了此语句,就能够在步伐运转时代不休向文件写进数据而不会堵塞,而且数据会被保留上去以供read读出.
(2)当$Pfifo中已没无数据时,read没法读到数据,历程会被堵塞在read操纵上,直到有子历程运转停止,向$Pfifo写进一行.
(3)中心实行局部也可以使用以下体例
带来一篇Bash剧本完成批量功课并行化
登录/注册后可看大图

{}和()的区分在shell是不是会衍生子历程
(4)此***在今朝的Cygwin(版本1.7.27)下没法利用,因其不撑持双向定名管道.有人提到一个办理计划,利用两个文件形貌符来替换单个文件形貌符,但此***我没有测试乐成.




如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
作者: 透明    时间: 2015-1-15 14:20
标题: 带来一篇Bash剧本完成批量功课并行化
打酱油的人拉,回复下赚取积分
作者: 飘灵儿    时间: 2015-1-25 20:29
眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。
作者: 分手快乐    时间: 2015-2-4 10:11
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
作者: 深爱那片海    时间: 2015-2-9 22:06
我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。
作者: 兰色精灵    时间: 2015-2-28 04:06
有疑问前,知识学习前,先用搜索。
作者: 再现理想    时间: 2015-3-9 22:55
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
作者: 海妖    时间: 2015-3-17 07:27
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
作者: 金色的骷髅    时间: 2015-3-24 05:33
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2