linux – Bash虽然读取循环比cat慢得多,为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – Bash虽然读取循环比cat慢得多,为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含932字,纯文字阅读大概需要2分钟。
内容图文
![linux – Bash虽然读取循环比cat慢得多,为什么?](/upload/InfoBanner/zyjiaocheng/952/4bd45543149e40c4a98717d908659ee2.jpg)
一个简单的测试脚本:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
当我做cat my450klinefile.txt | myscript CPU锁定为100%,每秒可处理大约1000行.大约5分钟处理cat my450klinefile.txt> / dev / null在半秒内完成的事情.
有没有更有效的方法来实现这一点.我只需要从stdin读取一行,计算字节数,然后将其写入命名管道.但即便是这个例子的速度也很慢.
每1Gb的输入行我需要做一些更复杂的脚本操作(关闭并打开一些数据被输入的管道).
解决方法:
读取速度太慢的原因是shell需要为每个字节进行系统调用.它无法从管道中读取大缓冲区,因为shell不能从输入流中读取多行,因此必须将每个字符与换行符进行比较.如果在while循环中运行strace,则可以看到此行为.这种行为是可取的,因为它可以可靠地执行以下操作:
while read size; do dd bs=$size count=1 of=file$(( i++ )); done
其中循环内的命令是从shell读取的相同流中读取的.如果shell通过读取大缓冲区消耗了大量数据,则内部命令将无法访问该数据.一个令人遗憾的副作用是读取是非常缓慢的.
内容总结
以上是互联网集市为您收集整理的linux – Bash虽然读取循环比cat慢得多,为什么?全部内容,希望文章能够帮你解决linux – Bash虽然读取循环比cat慢得多,为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。