作者yzugsr (Bird)
看板Ruby
标题Re: [问题] 传输时间非线性
时间Sat Jun 21 00:15:06 2008
※ 引述《wwwc (secret)》之铭言:
: tmp = alice.gets
我不是很确定
但我看Ruby source code中gets的实作 (在io.c)
他应该是每次最多读8192 bytes
然後附加到之前的字串上
所以一次读1M左右 可能会造成不断的allocate memory & copy data
而且看到这行
rb_str_resize(str, last + len);
似乎每次读取 只会allocate刚刚好的memory
所以看样子 当资料足够大的时候
这个演算法会有O(N^2)的time complexity
==
其实手边没有灌ruby的环境
以上纯属嘴炮 XD
gets看起来是用在读取一般文字输入
资料量大的时候最好不要用gets
试试用别的function还会不会这样
P.S. write我有稍微看一下 应该是O(N)没问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.33.124
※ 编辑: yzugsr 来自: 123.193.33.124 (06/21 00:16)
※ 编辑: yzugsr 来自: 123.193.33.124 (06/21 00:17)
※ 编辑: yzugsr 来自: 123.193.33.124 (06/21 00:18)
1F:推 godfat:good point, 试试 read? 不过 client/server 时间一致吗? 06/21 00:32
2F:→ godfat:我试了,用 read 也一样,不过我都是线性时间... 06/21 00:43
3F:推 wwwc:请问楼上板主 一次传送的资料长度是?传送时间大概是?谢谢! 06/21 12:32
4F:推 godfat:就你的测资,local 对传,单位约 0.05 秒,线性成长 06/21 14:39