在主进程中, 读入一个大文件内容后,导致前后执行相同逻辑的耗时存在明显的差异
#!/bin/bash
function readDataFromFile()
{
fileName=$1
content=`cat $fileName`
echo $content
}
function testPwdFunc()
{
nc_result=`pwd`
echo $nc_result
data=10
return $data
}
timeStart1=$(date +%s)
for ((i=1;i<=10000;i++));
do
data=`testPwdFunc`
done
timeEnd1=$(date +%s)
let timeDelta=($timeEnd1 - $timeStart1)
echo $timeDelta
content=`readDataFromFile 'conten.txt'`
echo $content
timeStart2=$(date +%s)
for ((i=1;i<=10000;i++));
do
data=`testPwdFunc`
done
timeEnd2=$(date +%s)
let timeDelta2=($timeEnd2 - $timeStart2)
echo $timeDelta2
==============
上述代码, conten.txt是一个39M的普通.txt 文件, 内容为数字或者字符串;
问题:
在linux 系统下执行:
当有这行代码:content=`readDataFromFile 'conten.txt'` 时, $timeDelta2 的值是 $timeDelta 3到5倍左右。
当不执行content=`readDataFromFile 'conten.txt'` , 或者 将这行代码改为`readDataFromFile 'conten.txt'`,即 函数readDataFromFile 的返回值不赋值给任何变量时, $timeDelta2 的值与 $timeDelta 的值相等
在mac 系统下, 无论是否执行content=`readDataFromFile 'conten.txt'` 这行代码, $timeDelta2 的值与 $timeDelta 的值都相等
在python 中也做了相应的测试, python 代码中执行shell命令是调用的commands.getstatusoutput 函数。
结果与shell遇到的现象完全一致。当在前后两个for 循环 中间引入读一个39M文件后, 前后两个timeDelta 的耗时相差几倍。 去掉读39M并返回文件内容的逻辑之后, 前后耗时完全一致
请教各位技术达人,恳请解释一下: 导致这个现象的原因是啥?