当前位置: 首页 > news >正文

docker对网络和程序速度的影响

文章目录

  • 前言
  • 环境说明
  • 网络测试
  • 程序速度测试

前言

程序即可以部署在容器内,也可以部署在docker容器中,那么两者有什么区别?部署在容器中相对于直接部署在宿主机上,网络速度是否会变慢?程序运行是否会慢?

环境说明

测试使用的服务器是百度智能云轻量级服务器,2核4G,6M宽带。
在这里插入图片描述
系统: centos 7.9
docker版本: Docker version 20.10.13, build a224086
springboot版本: 2.7.3

网络测试

两个标签窗口,上图直接使用宿主机进行ping 命令,下图docker的容器内进行ping命令,同时ping同一个ip地址。
在这里插入图片描述
根据多次ping命令的观察,可以发现在docker容器内进行ping命令速度比宿主机内慢0.1~0.2 ms。
结论:docker 对网络的影响很小,大约比主机慢0.1~0.2毫秒。

程序速度测试

程序运行速度的是,我们使用springboot 的web方式测试,代码是生成一个倒序的数组,例如5,4,3,2,1
,通过冒泡排序算法对数组排序(从小到大),得出排序所消耗的时间。
代码如下:

    @GetMapping("/test/{num}")
    public String test(@PathVariable("num") int num){
        long s=System.currentTimeMillis();
        int[] arr=new int[num];
       for(int i=num;i>0;i--){
           arr[num-i]=i;
       }
        //System.out.println(Arrays.toString(arr));
        BubbleSortMethod(arr);//冒泡排序
       // System.out.println(Arrays.toString(arr));
        long e=System.currentTimeMillis();
        return "排序:"+num+",耗时:"+(e-s)+" ms";
    }

    public static int[] BubbleSortMethod(int[] arr){
        int temp = 0;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1 -i; j++) {
                if (arr[j] > arr[j+1]){
                    temp  = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }

将程序打包为jar包,分别直接部署在宿主机和docker容器内。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为了避免不确定因素,我们需要多次测试,求平均值。
测试num=100000,将10万个数字进行排序。

编号宿主机模式(ms)docker模式(ms)
145904869
245854647
347924750
451164615
550875087
650635372
749785120
855165098
951255076
1053465331
平均耗时50125002

平均值计算:去掉一个最大,去掉一个最小,求平均数。

总结:
宿主机和 docker容器运行程序的两种方式,宿主机并没有优势,docker容器运行的方式会尽可能正确主机的资源,虽然从平均值看,docker运行的模式比宿主机直接运行还快一点,但是从单次比较,宿主机最快的一次运行4590毫秒,而docker最快的一次是4647毫秒,这又反向说明docker模式的并不一定比主机模式快,所以docker的平均运行比宿主机快属于运行误差,不能佐证docker在速度上优于主机。
所以主机运行模式和docker容器模式在程序运行效率上没有明显的差异。

相关文章:

  • 下沉一线农技志愿服务 国稻种芯-芜湖:湾沚红杨护秋粮生产
  • java计算机毕业设计同学录管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 枯竭的水库求生的稻田 国稻种芯·九江:位于抗旱一线的都昌
  • 网课搜题公众号题库接口系统
  • 分享网课查题公众号接口 及如何使用
  • 网课搜题公众号制作方法
  • Ubuntu 安装 HDF5 C++库
  • 【Linux系统管理】10 Shell 编程进阶篇
  • Jackson ImmunoResearch 直接和间接蛋白质印迹方案
  • bazel构建项目案例(第三方库,编译成库,运行案例)
  • Jackson ImmunoResearch 用于蛋白质印迹的偶联物方案
  • 如何扫描到最新可用的http代理ip?
  • 计算机视觉入门-最小二乘法、随机取样法、鲁棒估计、霍夫变换
  • 猿创征文|Mock.js概述及模块化开发实践(一文足矣)
  • 各种芯片复位电路分析
  • Angular 响应式表单之下拉框
  • AWS实战 - 利用IAM对S3做访问控制
  • docker python 配置
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • LeetCode18.四数之和 JavaScript
  • Lucene解析 - 基本概念
  • mysql_config not found
  • Otto开发初探——微服务依赖管理新利器
  • Quartz初级教程
  • RxJS: 简单入门
  • 测试开发系类之接口自动化测试
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信小程序实战练习(仿五洲到家微信版)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一份游戏开发学习路线
  • 译米田引理
  • NLPIR智能语义技术让大数据挖掘更简单
  • 阿里云移动端播放器高级功能介绍
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # include “ “ 和 # include < >两者的区别
  • # Java NIO(一)FileChannel
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (1)bark-ml
  • (3)选择元素——(17)练习(Exercises)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (排序详解之 堆排序)
  • (三)终结任务
  • (一)基于IDEA的JAVA基础1
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core WebAPI中封装Swagger配置
  • .net 后台导出excel ,word