docker加速python,为什么?

can*_*his 6 python macos ubuntu docker

所以我第一次在我的Mac上玩Docker.我boot2docker通过标准教程使用,我开始在ubuntu图像中提示.

docker pull ubuntu
docker run -i -t ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

当我在码头工作时,我开始了我的第一个实验,看看性能是否会下降.从命令行我会使用python timeit模块快速检查一些基本的性能指标.

Mac Python结果
$ python3.4 -m timeit '"-".join(str(n) for n in range(100))'
10000 loops, best of 3: 37.7 usec per loop
$ python3.4 -m timeit '"-".join([str(n) for n in range(100)])'
10000 loops, best of 3: 34.2 usec per loop
$ python3.4 -m timeit '"-".join(map(str, range(100)))'
10000 loops, best of 3: 26.2 usec per loop
Run Code Online (Sandbox Code Playgroud) Docker Python结果
> python3 -m timeit '"-".join(str(n) for n in range(100))'
10000 loops, best of 3: 30 usec per loop
> python3 -m timeit '"-".join([str(n) for n in range(100)])'
10000 loops, best of 3: 26.9 usec per loop
> python3 -m timeit '"-".join(map(str, range(100)))'
10000 loops, best of 3: 20.2 usec per loop
Run Code Online (Sandbox Code Playgroud)

看起来奇怪的是,在我的mac上运行的docker ubuntu实际上比mac上的python运行python代码更快.为什么会出现这种情况有什么原因吗?

编辑

我可以确认两个python版本都在64位运行.

Mac Python
python3 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
7fffffffffffffff True
Run Code Online (Sandbox Code Playgroud) Ubuntu Python
python3.4 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
7fffffffffffffff True
Run Code Online (Sandbox Code Playgroud)

Chr*_*vis 1

这更多的是操作系统的差异,而不是 docker 性能的差异。衡量应用程序的性能可能很棘手。

最重要的是,OS X 有大量进程会与您的测试竞争,而 OS X 可能没有给您的测试提供高优先级。

在大多数情况下,容器的性能应与本机环境一样好(有时更好)。但是,您的测试应该使容器能够工作。当您的应用程序进行系统调用和访问 I/O 时,Docker 需要增加开销,因此这些都应该包含在您的测试中。

IBM 去年写了一篇关于 Linux Container 与 Native env 问题的论文。

http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf