⑴ 传统虚拟机和Docker容器在性能上的区别
IBM研究部门发表了一篇关于容器和虚拟机环境性能比较的论文。这篇论文使用了Docker和KVM作为研究对象,阐述了Docker使用NAT或AUFS时的开销,并且质疑了在虚拟机上运行容器的实践方法。
论文作者在原生、容器和虚拟化环境中运行了CPU、内存、网络和I/O的benchmark。其中,分别使用KVM和Docker作为虚拟化和容器技术的代表。Benchmark也包含了对不同环境下Redis和MySQL负载的采样。通过小数据包和多客户端,Redis侧重于网络栈的性能。而MySQL侧重于内存,网络和文件系统的性能。
结果显示,在每一项测试中,Docker的性能等同于或超出KVM的性能。在CPU和内存性能方面,KVM和Docker都引入了明显的,但可略不计的开销。但是,对于I/O密集型的应用,两者都需要进行调整以减少开销带来的影响。
当使用AUFS存储文件时,Docker的性能会降低。而相比之下,使用卷(volume)能够获得更好的性能。卷是一种专门设计的目录,存在于一个或多个容器内。通过这种目录能够绕过联合文件系统(union file system)。这样它就没有了存储后端可能带来的开销。默认的AUFS后端会引起显着的I/O开销,特别是当有多层目录深度嵌套的时候。
Docker的默认网络选项,--net=bridge,由于NAT会重写数据包,也引入了性能开销。当数据包收发率变高时,这种开销会变得很明显。可以通过使用--net=host改善网络的性能。这个选项告诉Docker不要为容器创建一个独立的网络栈,并允许容器拥有宿主机网络接口的完全访问权限。但是,使用这个选项时要小心。因为它允许容器内的进程像其他根进程一样,使用数值较小的端口;并允许容器内的进程访问本地网络服务,如D-bus。这使得容器内的进程可以做一些预料之外的事情,如重启宿主机。
尽管自诞生以来,KVM性能有了相当大的提升,但它仍然不适用于对延时敏感或高I/O访问率的工作负载。因为每次I/O操作,它都会增加一些开销。这个开销对于耗时较少的I/O操作是有意义的,但对于耗时较长的I/O操作是可以忽略的。
根据这些测试结果,论文对使用虚拟机实现IaaS的方法提出了质疑:
传统观点(在某种程度上,这种观点存在于年轻的云生态圈中)认为使用虚拟机实现IaaS,使用容器实现PaaS。我们没有找到技术方面的理由来证明必须这么做,尤其是证明容器基于IaaS能提供更好的性能或者更容易部署。由于容器提供了控制手段,并在不使用虚拟机的情况下能达到物理机的性能,所以它能够消除IaaS和非虚拟化的服务器间的差异。
尽管在虚拟环境中运行容器是一种常见的实践方法,但是论文建议直接在物理的linux服务器上运行它们。否则,相比于直接运行在非虚拟化的Linux上的方法,由于虚拟机的性能开销,这种实践方法不会得到任何额外的好处。
⑵ 编译器编译的时间, 要比解释语言运行的速度慢吗为什么
只能说说通常的情况,因为情况比较复杂
一般来说,编译的语言比解释性语言运行的速度块
不过编译时间的话就很难说了,和编译器本身有关系
解释语言可以不用专成 二进制代码直接运行
⑶ Docker容器是什么它比虚拟机强在何处
Docker容器是一个开源的应用容器引擎,可以让开发者用统一的形式打包其自身的应用,然后包装到一个可以移植的容器中,随后发布到任何可以安装Docker引擎的服务器上(比如主流的Linux机器或者是Windows机器),当然也可以实现虚拟化。Docker容器几乎没有性能开销,可以很容易的在机器和数据中心运行,其最大的特色就是不依赖任何系统,框架甚至是语言。
由于容器是进程级的,相比于虚拟机有着很多的优势
一:启动速度快:由于容器里面的应用软件,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以启动容器时,不是启动一整个操作系统,速度就快了很多。
二:资源占用少:相比于虚拟机而言,容器只占用需要的资源,不会去占有无效的资源,而虚拟机则是一个完整的操作系统,不可避免的占用了所有资源。
三:体积小,轻量级:容器只需要包含用到的组件,对比于虚拟机,容器文件要比虚拟机小很多。
四:方便移动:容器技术最重要的就是为不同的主机上运行服务一个轻便,一致的格式。容器的格式更加标准化且方便客户对工作负载的迁移,有效避免单一的平台提供商。
⑷ 为什么我的C++编译器运行起来比其他电脑运行起来慢啊!大家帮帮忙把!~~~~~~~~~
1. 开的程序太多,关掉占用资源的一些程序,比如浏览器,播放器等。
2. 升级你的C++编译器的版本。
3. 卸载然后重新安装你的C++编译器。
4. 重新安装操作系统。
5. 升级你的电脑。
⑸ 容器与虚拟机的区别
1.容器技术简介
对于容器,它首先是一个相对独立的运行环境,在这一点有点类似于虚拟机,但是不像虚拟机那样彻底。在容器内,应该最小化其对外界的影响,比如不能在容器内把宿主机上的资源全部消耗,这就是资源控制。
2.容器与虚拟机的区别
容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。
1
1
容器与虚拟机拥有着类似的使命:对应用程序及其关联性进行隔离,从而构建起一套能够随处运行的自容纳单元。此外,容器与虚拟机还摆脱了对物理硬件的需求,允许我们更为高效地使用计算资源,从而提升能源效率与成本效益。
虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。
对于容器环境来说,不需要安装主机操作系统,直接将容器层(比如LXC或libcontainer)安装在主机操作系统(通常是Linux变种)之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。
相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。
因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包,所以每套容器都拥有自己的隔离化用户空间,从而使得多套容器能够运行在同一主机系统之上。我们可以看到全部操作系统层级的架构都可实现跨容器共享,惟一需要独立构建的就是二进制文件与库。正因为如此,容器才拥有极为出色的轻量化特性。
对Docker稍有接触的人应该都见过下图,无需更多解释,Docker减少Guest OS这一层级,所以更轻量和更高性能。
docker虚拟机区别
3.深层区别:
docker虚拟机区别
更新:Docker现在已经支持windows平台,所以上面的Windows支持一栏可以忽略。
⑹ 为什么C++编译比C语言编译慢很多
C++特性比C多,例如面向对象,语法比C复杂,例如重载,默认参数等,此外标准库也比C库强大,当然对编译器的要求也就更高。C++编译器相对于C编译器要做的事情多很多,所以编译起来相对较慢啦。
⑺ 对容器的(频繁)操作c++为什么比java的要慢很多
一方面,这是C++在设计过程中考虑了太多的通用性(比如允许自定义内存分配器)导致效率受影响;另一方面,你使用的方式map<int,map<int,float> > m_map导致了大量的数据复制,改成map<int,map<int,float>*> m_map应该会有明显的改善。
⑻ 虚拟linux为什么比物理linux慢
首先确认一下你的cpu在bios里有没有开启虚拟化,虚拟机最新的技术都是可以和cpu直接配合的,这需要cpu厂商的支持,现在新的cpu都支持了,虚拟机的系统就像真实系统一样强大,如果虚拟机总比真实系统慢,那虚拟机就不能用在生产环境了。你虚拟机运行在win7上本身就耗了很大的资源,肯定会慢。还有可能就是你虚拟机和计算机结合的不够好,虚拟机要走向成熟还有很长的路要走
⑼ 如何看待docker容器与虚拟机之间的比较
如何看待docker容器与虚拟机之间的比较
题主应该是不知道docker的意义,而不是否认这些技术优势吧。我试着分析一下意义:
1、启动快大部分情况下只影响了用户体验,但是对于负责大规模部署的运维来讲,意义还是挺大。一个东西上线是要一天,还是一个小时,情况是很不一样的。
2、资源利用高的意思是,虚拟化会消耗资源比容器多。不太准确地说,经过虚拟化层,留给用户的资源只剩90%,而容器可以剩下99%。对于云的意义直观来讲就是可以省钱啊。
3、性能开销的意义在于,由于存在一个虚拟化层,即使虚拟机独占所有的物理资源,但跑在里面的程序性能还是比物理机慢,这方面应该cpu内存还好一点,存储和其他外设就比较糟糕了。而容器只是一个进程,性能与物理机几乎一样。普通用户没什么感觉,但要求稍高一点的用户就有问题了