CNode

看《nodejs入门》,其中提到非阻塞,有一句代码不明白

Zzysam发布于14 年前最后回复14 年前7 回复6173 浏览0 收藏

exec("find /", { timeout: 10000, maxBuffer: 20000*1024 }, function (error, stdout, stderr) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write(stdout); response.end(); });

书上介绍"find /"将花费10s,但是我试验时运行很快,几乎试验不出“非阻塞”这个概念。我在想,是否“find /”的问题,根目录只有4个文件而已。难道仅是文件不够多,使得“find /”无需超时10s吗,只是几毫秒就完成了。如果真的是这种,这本书太不照顾新手了,用别的例子试验非阻塞岂非更好!

查看回复

回复 (7)

J
j4cnodejs#1·14 年前

你没仔细看书啊, 我记得那上面说, 根目录有海量文件!!

A
a272121742#2·14 年前

我觉得看书不够仔细,虽然node入门我看过之后都过了很久,但是很启蒙的一本书,其中的原话是这样的: 我们这里“ls -lah”的操作其实是非常快的(除非当前目录下有上百万个文件) ... 为了让效果更加明显,我们想象一个更耗时的命令: “find /”,它在我机器上需要执行1分钟左右的时间,然而,尽管在请求处理程序中,我把“ls -lah”换成“find /”,当打开/start URL的时候,依然能够立即获得HTTP响应 —— 很明显,当exec()在后台执行的时候,Node.js自身会继续执行后面的代码。并且我们这里假设传递给exec()的回调函数,只会在“find /”命令执行完成之后才会被调用。

Z
zysam#3·14 年前
引用 a272121742我觉得看书不够仔细,虽然[node入门][1]我看过之后都过了很久,但是很启蒙的一本书,其中的原话是这样的: 我们这里“ls lah”的操作其实是非常快的(除非当前目录下有上百万个文件) .....

嗯,我也觉得启蒙性很好,按书步骤,我大约知道一点commonJS模块,以后阅读别人的代码也容易些。但是这个例子用于入门阻塞,总感觉不妥,难道我得拷贝一些文件夹在根下,才能验证它?(不知道我这么理解对不对,文中的确没有提到)。别外一些,无关代码的细节问题,又占用不少学习时间。总而言之,不断验证,反复折腾,学习不易呀。@272121742,这个是你的QQ号吗?想向你请教些新手问题。。。

K
kictpov#5·14 年前

我也在这个地方遇到问题了,他说“会花 10 秒钟的时间才载入”,感觉这个十秒钟是按照:timeout: 10000,来的,所以个人认为是这个timeout没起作用,不知道同学这一个半月之后有没有更好的认识嘿嘿感谢赐教~

L
luofei614#6·14 年前

你用 exec('ping 0.0.0.0 -n 10') 来测试

Z
zhs077#7·14 年前

sleep(10000)

参与回复
登录后即可参与回复。登录