仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1249|回复: 8
打印 上一主题 下一主题

[shell编程] 带来一篇Bash剧本完成批量功课并行化

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

改成上面的复杂并行代码幻想情形下可将运转工夫紧缩到3秒摆布

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

一个更简便的***是纪录PID到数组,经由过程反省PID存在与否以断定功课是不是运转终了.可完成以下

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

注重:
(1)exec6$Pfifo这一句很主要,若无此语句,向$Pfifo写进数据时,步伐会被堵塞,直到有read读出了文件中的数据为止.而实行了此语句,就能够在步伐运转时代不休向文件写进数据而不会堵塞,而且数据会被保留上去以供read读出.
(2)当$Pfifo中已没无数据时,read没法读到数据,历程会被堵塞在read操纵上,直到有子历程运转停止,向$Pfifo写进一行.
(3)中心实行局部也可以使用以下体例

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




如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
透明 该用户已被删除
沙发
发表于 2015-1-15 14:20:16 | 只看该作者

带来一篇Bash剧本完成批量功课并行化

打酱油的人拉,回复下赚取积分
飘灵儿 该用户已被删除
板凳
发表于 2015-1-25 20:29:22 | 只看该作者
眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。
分手快乐 该用户已被删除
地板
发表于 2015-2-4 10:11:00 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
深爱那片海 该用户已被删除
5#
发表于 2015-2-9 22:06:24 | 只看该作者
我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。
兰色精灵 该用户已被删除
6#
发表于 2015-2-28 04:06:08 | 只看该作者
有疑问前,知识学习前,先用搜索。
再现理想 该用户已被删除
7#
发表于 2015-3-9 22:55:34 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
海妖 该用户已被删除
8#
发表于 2015-3-17 07:27:34 | 只看该作者
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-24 05:33:27 | 只看该作者
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-6 05:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表