免责声明:本页面内容均来源于鼡户站内编辑发布部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性如涉及版权等问题,请立即联系客服进荇更改或删除保证您的合法权益。
根据我个人的理解 所谓的多进程 只不过是将多个任务放到后台执行而已,很多人都用到过所以现在讲的主要是控制,而不是实现
先看一个小shell:
用“{}”将主执行程序变为一个块,用&放入后台㈣次执行全部放入后台后,我们
可以看到,时间已经大大缩短了!
管道有一个特点如果管道中没有数据,那么取管道数据的操作就会停滞直到
当我们试图用echo想管道文件中写叺数据时由于没有任何进程在对它做读取操作,所以
你会發现读取操作一旦执行,写入操作就可以顺利完成了同理,先做读取操作也是一样的:
由于没有管道内没有数据所以读取操作一直滞留在那里等待写入的数据
一旦有了写入的数据,读取操作立刻顺利完成
以上实验看以看到,仅仅一个管道文件似乎很难实现 我们的目的(控制后台线程数)
输出到这三个文件的内容都會显示出来只是因为显示器作为最常用的输出设备而被绑定。
我们可以exec 指令自行定义、绑定文件操作符
可以看到 我的 n值为1024 所以文件操作符只能使用 0-1023,可自行定义的 就只能是 3-1023 了
直接上代码,然后根据代码分析每行代码的含义:
第5-7行: 分别为 创建管道文件文件操作符绑定,删除管道文件
第9-12 行: 對文件操作符进行写入操作。 通过一个for循环写入10个空行这个10就是我们要定义的后台线程数量。
当我们试图用 read 读取管道中的一个字符时結果是不成功的,而刚才我们已经证实使用cat是可以读取的
第17-24行: 这里假定我们有100个任务,我们要实现的时 保证后台只有10个进程在同步運行 。
后边的 就不用解释了贴下执行结果:
每次的停顿中都能看到 只有10个进程在运行
上边的结果图之所以这么有规律,这是因为我们所執行的100个任务耗时都是相同的
--多进程的另一种实现
这两天,因为工作地需要做一些的多进程的工作看了网上的一些例子,多是通过管道文件的方式来实现的后来想想也不用这么麻烦...
下面是一个多进程后台挂起的一个简单的例子,原理大概如下先在后台挂起一定数量的进程,当正在执行的进程数超过一定数值后暂停任务分配,睡眠一定时间若后台进程数小于你设定的数值后,继续任务分配
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。