linux下的并发处理
来源:互联网 发布:java点菜系统项目案例 编辑:程序博客网 时间:2024/06/09 06:33
#!/bin/bash
tmpfile=$$.fifo #创建管道名称
mkfifo $tmpfile #创建管道
exec 4<>$tmpfile #创建文件标示4,以读写方式操作管道$tmpfile
rm $tmpfile
thred=4 #指定并发个数
seq=(1 2 3 4 5 6 7 8 9 21 22 23 24 25 31 32 33 34 35) #创建任务列表
# 为并发线程创建相应个数的占位
{
for (( i = 1;i<=${thred};i++ ))
do
echo; #因为read命令一次读取一行,一个echo默认输出一个换行符,所以为每个线程输出一个占位换行
done
} >&4 #将占位信息写入管道
for id in ${seq[*]} #从任务列表 seq 中按次序获取每一个任务
do
done <&4 #指定fd4为整个for的标准输入
wait
exec 4>&- #关闭管道
整个流程中read 和 echo 对fd4的交替写入和读取是并发处理的关键
可以想象 如果read 命令发现fd4中没有数据时 将等待fd4的数据
如果可以自动kill掉超时的子任务就更好了
原文:能不能用shell做一个队列 http://www.chinaunix.net/jh/24/675452.html
#!/bin/bash
tmpfile=$$.fifo
mkfifo $tmpfile
exec 4<>$tmpfile
rm $tmpfile
{ echo;echo;echo;echo; } >&4
for (( i = 1 ; i <= 100 ; i++ ))
do
done <&4
wait
nees 回复于:2005-12-25 20:32:11
我在linux下测试通过。
另外我写了一种 变体,对于参数不是连续的也可以适用,请大家指正:
#!/bin/bash
tmpfile=$$.fifo
mkfifo $tmpfile
exec 4<>$tmpfile
rm $tmpfile
thred=4
seq=(1 2 3 4 5 6 7 8 9 21 22 23 24 25 31 32 33 34 35)
#
{
for (( i = 1;i<=${thred};i++ ))
do
echo;
done
} >&4
for id in ${seq[*]}
do
done <&4
wait
- linux下的并发处理
- PHP在并发下的锁处理
- 【转】并发场景下的中断处理
- 几种高并发下写的处理策略
- linux 并发机制的处理方法
- Linux驱动的并发处理---原子操作
- Linux驱动的并发处理--锁机制
- Linux并发处理
- Linux并发处理
- Linux并发处理
- Linux下模拟多线程的并发并发shell脚本
- Linux下模拟多线程的并发并发shell脚本
- LINUX下串口数据的并发收发
- Linux下网络编程之自定义协议进行并发多客户端与服务器的通信(多进程处理并发)不足占用资源太多
- 高并发下的不同订单相同订单号的处理
- linux下的信号处理
- linux下的time处理
- linux下的信号处理
- 提高linux并发处理能力
- 通俗易懂的介绍匈牙利算法
- Java实现定时任务的三种方法
- 轮廓提取
- Spring AOP 前切入点及多参数问题
- linux下的并发处理
- ubuntu gdb 多线程调试步骤
- 自己动手搭建免费VoIP服务器
- 源码安装yum
- android 网络判断工具类(APN+WIFI)
- 仿QQ布局实例
- 销售部年终总结酒店服务员年终总结
- njupt-1134-Christmas
- 笔记87--android坐标