Shell 实现多线程(多任务)
实现方案:
1.命令结尾添加:&
#/bin/bash all_num=10 a=$(date +%H%M%S) for num in `seq 1 ${all_num}` do { sleep 1 echo ${num} } & done b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
在命令的末尾加 & 符号,则命令将在后台执行,这样后面的命令不需要等待该命令执行完再开始执行。
2.解决主线程提前退出问题,添加 wait
#/bin/bash all_num=10 a=$(date +%H%M%S) for num in `seq 1 ${all_num}` do { sleep 1 echo ${num} } & # 将命令在后台执行,命令范围用{}包围 done # 等待当前脚本进程下的子进程结束 wait b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
3.控制后台执行数(线程数),mkfifo
#/bin/bash all_num=10 # 设置并发的进程数 thread_num=5 a=$(date +%H%M%S) # mkfifo tempfifo="my_temp_fifo" mkfifo ${tempfifo} # 使文件描述符为非阻塞式 exec 6<>${tempfifo} rm -f ${tempfifo} # 为文件描述符创建占位信息 for ((i=1;i<=${thread_num};i++)) do { echo } done >&6 # for num in `seq 1 ${all_num}` do { read -u6 { sleep 1 echo ${num} echo "" >&6 } & } done wait # 关闭fd6管道 exec 6>&- b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
参考资料
梦想要一步步来!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-08-21 Comparator与Comparable的异同