Re: [問題] 傳輸時間非線性
※ 引述《yzugsr (Bird)》之銘言:
: ※ 引述《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)沒問題
string_length time(seconds)
10000000 9.915431
20000000 42.183346
30000000 97.629504
40000000 164.325812
50000000 213.681785
60000000 395.54032
70000000 468.580234
80000000
90000000
100000000
以上是把gets改成read後的結果
不但非線性關係
而且花的時間遠超過gets !?
(空白的部分還沒跑完)
很納悶...
會不會是ruby版本的問題?(兩台電腦的版本不同)
我把code交換放在不同的機器上後
似乎就是線性關係
而且時間大幅減少
gets跟read也沒有什麼差異了!?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.16.218
→
06/21 14:41, , 1F
06/21 14:41, 1F
推
06/21 14:42, , 2F
06/21 14:42, 2F
已修改!
※ 編輯: wwwc 來自: 140.109.16.218 (06/21 15:01)
推
06/21 15:19, , 3F
06/21 15:19, 3F
→
06/21 18:54, , 4F
06/21 18:54, 4F
→
06/21 18:55, , 5F
06/21 18:55, 5F
→
06/21 19:10, , 6F
06/21 19:10, 6F
→
06/21 19:12, , 7F
06/21 19:12, 7F
→
06/21 19:14, , 8F
06/21 19:14, 8F
→
06/21 20:00, , 9F
06/21 20:00, 9F
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章