在解码GZIP和解析JSON时,为什么Julia会变慢?

Spa*_*man 2 python benchmarking julia

以下脚本逐行读取gzip文件并解码JSON对象

Pkg.add("GZip")
Pkg.add("JSON")


using GZip
using JSON

stream = GZip.gzopen(Base.ARGS[1])

_started = time()

i = 0

for line in eachline(stream)
    _j = JSON.parse(line)

    if i % 10000 == 0
        println(time()-_started)
    end

    i += 1

    try
        key_id = _j["some_id"]
    except
        pass
    end
end
Run Code Online (Sandbox Code Playgroud)

输出:

0.7071459293365479
20.09155511856079
37.8870849609375
Run Code Online (Sandbox Code Playgroud)

与Python比较:

import os
import sys
import gzip
import datetime

import ujson as json

_started = datetime.datetime.now()

fh = gzip.open(sys.argv[1])
for i, line in enumerate(fh):

    if i % 10000 == 0:
        print datetime.datetime.now() - _started

    line = json.loads(line)
    try:
        k = line['some_id']
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

输出:

0:00:00.028951
0:00:01.934277
0:00:03.821954
0:00:05.713572
Run Code Online (Sandbox Code Playgroud)

是的,我知道,我使用了非常快的ujson - 但是Julia不应该更快吗?相反,它慢得多=(

PS多次尝试,因此它与操作系统缓存无关.

PPS Mac OS 10.7.3,Julia 0.2.1

Jef*_*son 5

隔离JSON和GZIP操作是一个很好的建议.我的猜测(只是一个猜测!)是大部分时间是在JSON解析; ujson的确非常快.没有办法保证语言中发生的一切都很快.例如,PyPy通常会加速python代码,但在某些情况下仍然比C扩展慢或慢.