Kubernetes 学习总结(41)—— 云原生容器网络详解
背景
随着网络技术的发展,网络的虚拟化程度越来越高,特别是云原生网络,叠加了物理网络、虚机网络和容器网络,数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器网络、虚机网络和物理网络到达对端,期间必然带来网络性能损耗。
场景
(1)低延时交易场景
证券交易系统具有交易时间相对集中、交易指令和数据密集的特点,对交易系统处理速度具有极高的要求。近年来,全球各大交易所都在不断对交易系统升级改造,其中“低时延”成为各大交易所竞争的核心,交易系统延时竞争已经进入微秒量级。用户通过客户端委托交易下单经过交易所外的交易软件、主机网络和物理网络,进入交易所内软硬件网络撮合交易,然后将委托回报和成交回报通过反向网络数据链路发送给用户。
(2)视频和云游戏等流媒体场景
在多媒体领域,直播流媒体、在线视频和云游戏等场景都存在对网络性能、传输速度有极高的要求。单纯从软件或者操作系统虚拟化出来的网络设备,无法达到网络收发处理、转发和传输的性能要求,以及保证低丢包率和低时延。
(3)流量隔离场景
在银行、证券、保险等金融行业,因金融政策、监管政策的要求,需要实现对管理流量、存储流量和业务流量进行隔离,做到网络运维管理,数据存储、数据备份和数据交互同步与业务流量分离,保障数据交互同步与正常网络访问的相互隔离,提高网络并发能力和降低网络延迟。
以上应用场景,无法通过单纯的应用网络、主机网络和硬件网络来解决微妙级低延时要求。如何提升云原生时代整体网络性能,降低网络时延呢?我们可以从传统网络和容器网络路径分析哪些可以优化的点或片段,针对这些点或片段提供可行的容器网络加速方案。
术语
CNI:Container Network Interface,容器运行时和网络实现之间的容器网络 API 接口。
IPAM:专门用于管理容器的IP地址管理,包含对容器分配 IP 地址、网关、路由和 DNS 等管理。
SR-IOV:Single Root I/O Virtualization,单根虚拟化,允许在虚拟机之间高效共享 PCIe 设备。
PF:Physical Function,包含 SR-IOV 功能结构主要用于 SR-IOV 功能管理。PF 通过分配 VF 来配置和管理 SR-IOV 功能。
VF:Virtual Function,轻量级 PCIE 功能(I/O 处理)的 PCIE 设备,每个VF 都是通过 PF 来生成管理,VF 的具体数量限制受限于 PCIE 设备、自身配置和驱动程序的支持。
RDMA:Remote Direct Memory Access,远程直接内存访问,将网络协议栈下沉到网卡硬件,网卡硬件收发包并进行协议栈封装和解析,然后将数据存放到指定内存地址,而不需要 CPU 干预。
DPDK:Data Plane Development Kit,数据平面开发套件,工作在用户态用于快速数据包处理,使用轮询 Polling 来处理数据包。
VPP:Vector Packet Processing,矢量数据包处理,工作在用户态的高性能数据包处理协议栈。通常与 DPDK 结合使用,提供多种收发数据包、交换和路由能力。
VCL:VPP Communication Library,高性能 VPP 数据包处理协议栈类库。
eBPF:Extended Berkeley Packet Filter,可扩展的伯克利包过滤器,在操作系统内核中运行沙盒程序,安全有效地扩展内核功能,而不需要更改内核源代码或加载内核模块。主要提供主机网络通信、安全管理和可观测的能力。
Cilium:基于 eBPF 技术实现的网络插件,用于提供网络、安全和观测容器工作负载之间的云原生网络。
XDP:eXpress Data Path,快速数据路径,XDP 是 Linux 网络处理流程中的一个 eBPF 钩子,能够挂载 eBPF 程序,能够在网络数据包到达网卡驱动层时对其进行处理。
传统网络数据包处理路径
在传统的 Linux 主机网络中,源应用程序通过系统调用与内核中 Socket 层进行网络数据交互,网络数据包分别依次进入 Socket 层、传输层、网络层和网络接口层,最后通过网卡驱动、CPU 和物理网卡到达目标应用程序所在的物理网卡,期间 CPU 和网卡驱动频繁进行硬中断、软中断与轮询来通知操作系统进行收发收据包。
接下来,我们具体分析一下网络数据包发送流程:首先,在用户态网络协议栈中,源应用程序会调用 Socket 发送数据包的接口,数据包从用户态进入到内核态中的 Socket 层,Socket 层会将应用层数据拷贝到 Socket 发送缓冲区中。然后,在内核态网络协议栈中,从 Socket 发送缓冲区中取出数据包,并按照 TCP/IP 协议栈从上到下逐层处理。如果使用的是 TCP 传输协议发送数据,那么会在传输层增加 TCP 包头,然后交给网络层,网络层会给数据包增加IP包,然后通过查询路由表确认下一跳的 IP,并按照 MTU 大小进行分片。分片后的网络包,就会被送到网络接口层,通过 ARP 协议获得下一跳的 MAC 地址,然后增加帧头和帧尾,放到发包队列中。最后,等队列准备就绪后,会触发软中断告诉网卡驱动程序有新的网络包需要发送,最后驱动程序通过 DMA,从发包队列中读取网络包,将其放入到硬件网卡的队列中,随后在物理网络中,物理网卡再将它发送出去,通过交换机或者网桥等到达目标应用所在主机物理网卡。
网络数据包接收流程与网络数据包发送的流程正好相反,其中,发送流程执行数据包的封包处理,而接收过程则执行数据包的解包处理。基于以上网络数据包通信和处理过程,在高性能网络通信场景下,频繁的网络收发数据包,数据包在内核中不同网络路协议栈之间的封装和解包处理,以及软硬件中断与轮询,导致网络通信延迟较高。
容器网络数据包处理路径
在容器网络环境下,网络数据包的处理流程较传统网络数据包的处理路径更加长,网络环境更加复杂。容器网络数据包的发送和接收经过七层,分别是:容器用户态编程协议、容器内核态网络协议栈、容器与主机网卡对、主机用户态容器网络 CNI、虚拟主机网络、主机网卡驱动,主机网卡和物理网络。
相对于普通的容器化应用,微服务服务网格应用的容器网络最具代表性,主要多了边车 Sidecar 对应用的流量劫持和转发,其他的流量数据包处理过程与普通应用一样。下面以服务网格中应用与边车 Sidecar 之间的网络数据包发送和接收路径为例说明。
容器源应用程序访问目标应用程序的数据路径,在容器内与传统网络数据包收发处理流程类似,但是会增加容器主机网络路径。容器内源应用程序通过 Socket 调用,网络数据包由容器用户态进入容器内核态以太网协议栈,然后通过 Loopback 回环进入 Sidecar 边车的内核态和用户态协议栈。经由 Sidecar 流量劫持之后,通过应用 Sidecar 调用内核态 Socket 进入容器内核态以太网协议栈。最后经由主机用户态容器网络 CNI,通过虚拟主机网络,进入物理网卡和物理网络,转发至目标应用程序所在的主机和容器环境。目标应用程序所在的主机网络和容器网络的数据包处理路径与源应用程序数据包处理路径一样,但收发数据包的方向相反。
云原生背景下的容器网络,会在物理网络、主机网络、容器网络和容器主机网络等多个层面网络类型的网络性能瓶颈,可以从下表多维度分析潜在的网络加速方向:
基于以上容器网络数据路径的分析,可以从几个方面进行网络规划和建设:
1、智能硬件网络方面,可以通过 Offload 下沉网卡驱动和数据包至智能硬件(SRIOV/DPU/RDMA)实现加速。
2、软件网络方面,操作系统网络层分为内核态网络和用户态网络,通过 ByPass 操作系统内核态网络协议栈,进入用户态网络协议栈,在用户态借助工具套件 DPDK,以及用户态 VPP、 VCL 和 QUIC 等协议进行编程,解决用户态网络性能问题,实现内核态和用户态网络加速。
容器网络加速方案
1. 智能网络加速
借助于支持 SR-IOV 的智能硬件,把网卡驱动卸载至物理网卡。通过调用 Netlink 包将 VF 修改到容器的 Namespace 下,使得物理机中 PF 扩展出来的 VF 可以被容器直接调用。基于 Multus、SR-IOV Device Plugin 和 SR-IOV CNI (Kubernetes 1.24 之前的版本,CNI 的管理由 Kubelet 负责,新版 Kubernetes 版本 CNI 管理由 CRI 负责)实现网络 IO 卸载至物理网卡上的 VF,同时把 VF 另一端插入容器,作为容器的以太网网卡。容器网络数据包从容器用户态协议栈,经过容器内核态协议栈,通过 VF 卸载至物理网卡 PF,ByPass 容器主机内核和主机内核驱动从而实现网络加速。同时,在 Underlay 网络场景中,通过 IPAM 可以管理集群域的固定 IP 分配、释放和回收,以及防止 IP 泄漏和 IP 冲突检测等。
目前常见的支持容器 SR-IOV 技术的网卡有 Intel X710/X722/X520/540、Mellanox ConnectX-4/5/6 等,同时支持 NUMA、RDMA 和 DPU 等技术。
2. 内核态网络加速
基于支持 eBPF 的高内核版本(Kernel 4.19.57+,推荐5.10+ )的 Linux 操作系统,在 XDP 原生驱动模式(Native-Routing)或卸载模式(Offload,需要智能网卡支持)下 ByPass 内核协议栈,通过 Cilium CNI 将容器网卡一端植入 eBPF 程序,另一端插入容器内作为容器以太网网卡,实现通信和容器网络加速。可以基于 Multus、Cilium CNI 和 SpiderPool 实现内核网络加速。
3. 用户态网络加速
用户态的网络加速有多种实现方式,可以通过 SRIOV+DPDK 方式,把内核态网卡驱动切换成用户态网卡驱动,实现“用户态网卡 -> DPDK 轮询 Pool 模式-> DPDK 库 -> 应用程序” 跳过容器内核态网络协议栈,基于用户态 UIO Bypass 数据链路实现加速。或可以 DPDK +VPP/VCL 协议栈自编程模式的用户态网络极速。在服务网格场景下,借助于 Linux 高内核版本通过 eBPF Sockops/Sockmap 技术,实现应用服务与服务网格边车 Sidecar 之间的加速。
以上三种网络方案,各有其有特定使用场景,智能网络加速方案加速性能最好,需要有智能硬件网卡的支持,对操作系统没有特殊的要求。内核态网络加速方案加速性能居中,仅需要操作系统满足一定的内核版本要求,有较好的通用适配性,适应于大多数网络加速场景的要求。用户态网络加速方案作为智能网络加速和用户态网络加速在 ByPass 系统内核之外的互补方案,用于用户态域的的网络加速,可以帮助用户实现全场景的网络加速方案,适应于用户应用程序的在 DPDK 工具、VPP/VCL 协议族、gRPC/QUIC 低延迟协议等自编程。
参考链接:
https://docs.kernel.org/networking/index.html
https://docs.cilium.io/en/stable/overview/component-overview/
https://docs.cilium.io/en/stable/network/servicemesh/
https://cilium.io/use-cases/service-mesh/
https://ebpf.io/what-is-ebpf/
https://docs.openvswitch.org/en/latest/intro/install/afxdp/
https://github.com/k8snetworkplumbingwg/ovs-cni/blob/main/docs/ovs-offload.md
https://xie.infoq.cn/article/6ba14b756c3019cc737ed48a6
https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/0d6a9c513c96df38c5cf493c7aef3cfc.jpeg)
Kubernetes 学习总结(41)—— 云原生容器网络详解
背景 随着网络技术的发展,网络的虚拟化程度越来越高,特别是云原生网络,叠加了物理网络、虚机网络和容器网络,数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器…...
![](https://img-blog.csdnimg.cn/direct/d75f3fe0eeef4e65a6172c7ec1208b79.png#pic_center)
多人协同开发git flow,创建初始化项目版本
文章目录 多人协同开发git flow,创建初始化项目版本1.gitee创建组织模拟多人协同开发2.git tag 打标签3.git push origin --tags 多人协同开发git flow,创建初始化项目版本 1.gitee创建组织模拟多人协同开发 组织中新建仓库 推送代码到我们组织的仓库 2…...
![](https://img-blog.csdnimg.cn/img_convert/f546d41549e8971152b326f7d231e5b0.png)
「Kafka」入门篇
「Kafka」入门篇 基础架构 Kafka 快速入门 集群规划 集群部署 官方下载地址:http://kafka.apache.org/downloads.html 解压安装包: [atguiguhadoop102 software]$ tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/修改解压后的文件名称: [a…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP8的JIT(Just-In-Time)编译器是什么?
PHP8的JIT(Just-In-Time)编译器是什么? PHP8是最新的PHP版本,引入了JIT(Just-In-Time)编译器,以进一步提高性能和执行速度。 JIT编译器是一种在运行时将解释性语言转化为机器码的技术。在过去…...
![](https://img-blog.csdnimg.cn/direct/f995e0db15834c7a863aaaba2794e542.png)
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
文章目录 🚀前言🚀C有何过C之处?🚀C中的关键字🚀命名空间✈️为什么要引入命名空间?✈️命名空间的定义✈️如何使用命名空间中的内容呢? 🚀C中的输入和输出✈️C标准库的命名空间✈…...
![](https://img-blog.csdnimg.cn/direct/4e7dc93af18746d491d92a7f0991ea36.png)
Excel中部分sheet页隐藏并设置访问密码
1、新建sheet1 2、新建sheet2 3、隐藏sheet2 4、保护工作簿、输密码 5、密码二次确认 6、隐藏的sheet2已经查看不了 7、想要查看时,按图示输入原密码即可 8、查看sheet2内容...
![](https://img-blog.csdnimg.cn/direct/8dcab58cd1a442b0a751f54dc2714037.png)
从零开始配置pwn环境:CTF PWN 做题环境
前期在kali2023环境安装的pwndocker使用发现不好用,so找了网上配置好pwn环境的虚拟机。 GitHub - giantbranch/pwn-env-init: CTF PWN 做题环境一键搭建脚本 可以直接下载我配置好的Ubuntu 16.04,为VMware导出的ovf格式 链接:百度网盘 请输…...
![](https://img-blog.csdnimg.cn/direct/7a260d52634f4471abb124830f46c342.png)
Vue3复习笔记
目录 挂载全局属性和方法 v-bind一次绑定多个值 v-bind用在样式中 Vue指令绑定值 Vue指令绑定属性 动态属性的约束 Dom更新时机 ”可写的“计算属性 v-if与v-for不建议同时使用 v-for遍历对象 数组变化检测 事件修饰符 v-model用在表单类标签上 v-model还可以绑定…...
![](https://img-blog.csdnimg.cn/direct/78c18ffbd44e4a03a7613163554f4ec5.png)
【OpenCV】OpenCV:计算机视觉的强大工具库
摘要 OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV?二、OpenCV的功…...
![](https://img-blog.csdnimg.cn/direct/14cbb954a0b94423b1e21cdd88bfd821.png)
spring-boot-autoconfigure误引入spring-boot-starter-data-jpa而导致数据源初始化异常
一、现状描述 某个Grade类引入了jpa的注解: import javax.persistence.Column; import javax.persistence.Embeddable;/*** 年级*/ Embeddable public class Grade {Column(name "code")private int code; }并且pom.xml中引入该jar包:sprin…...
![](https://img-blog.csdnimg.cn/direct/f149cae1ae174cfd8b46793712e2dad0.png)
工程(十六)——自己数据集跑Fast_livo
一、基础环境 Ubuntu20.04 ROS noetic PCL 1.8 Eigen 3.3.4 Sophus git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff mkdir build && cd build && cmake .. make sudo make install 下面两个直接把包下载下来一起编译…...
![](https://img-blog.csdnimg.cn/direct/aab6c207f4da4513a76f0b3e16d9c174.png)
PostgreSQL数据库的json操作
1.操作符 select json字段::json->key值 from order -- 对象域 select json字段::json->>key值 from order -- 文本 select json字段::json#>{key值} from order -- 对象域 select json字段::json#>>{key值} from order -- 文本对象域表示还能继续操作&#…...
![](https://www.ngui.cc/images/no-images.jpg)
gradio-osprey-demo
创建需要的dockerfle ################### # 使用 Ubuntu 作为基础镜像 FROM nvcr.io/nvidia/cuda:11.8.0-devel-ubuntu22.04 # 更新软件包列表并安装依赖项 RUN apt update && \ apt install -y python3 python3-pip git ffmpeg libsm6 libxext6 curl wget …...
![](https://img-blog.csdnimg.cn/direct/c2b1df4d09ba45ddaa5cc5cd2688250f.png#pic_center)
从仿写持久层框架到MyBatis核心源码阅读
接上篇手写持久层框架:https://blog.csdn.net/liwenyang1992/article/details/134884703 MyBatis源码 MyBatis架构原理&主要组件 MyBatis架构设计 MyBatis架构四层作用是什么呢? API接口层:提供API,增加、删除、修改、查询…...
![](https://img-blog.csdnimg.cn/0edaf198db0444d19309d1de13f0b209.png)
浏览器常用基本操作之python3+selenium4自动化测试
1、打开指定的网页地址 我们使用selenium进行自动化测试时,打开浏览器之后,第一步就是让浏览器访问我们指定的地址,可使用get方法实现 1 2 3 from selenium import webdriver driver webdriver.Edge() driver.get(https://www.baidu.com/)…...
![](https://img-blog.csdnimg.cn/8df2e5d57129451ca0ccad9b23d3e152.jpeg)
在MySQL中使用VARCHAR字段进行日期筛选
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
![](https://img-blog.csdnimg.cn/direct/fffe925d08a64217976b9435dcb4e7f6.png)
微信小程序自定义步骤条效果
微信小程序自定义一个步骤条组件,自定义文字在下面,已完成和未完成和当前进度都不一样的样式,可点击上一步和下一步切换流程状态,效果如下。 这是视频效果: 前端实现步骤条效果 下面我们一步步实现编码,自定…...
![](https://img-blog.csdnimg.cn/direct/3eb59e16505b40839c4f0534255a847f.jpeg#pic_center)
QT的信号与槽
QT的信号与槽 文章目录 QT的信号与槽前言一、QT 打印"hello QT"的dome二、信号和槽机制?二、信号与槽的用法1、QT5的方式1. 无参的信号与槽的dome2.带参的信号与槽dome 2、QT4的方式3、C11的语法 Lambda表达式1、函数对象参数2、操作符重载函数参数3、可修…...
![](https://img-blog.csdnimg.cn/direct/d9c1d7c203064a3a995386ff9ffec9c5.png)
Python 为UnityAndroid端自动化接入Tradplus广告SDK
Python 为UnityAndroid端自动化接入Tradplus广告SDK Tradplus介绍常规接入进入Android开发文档选择渠道配置生成接入代码人工依赖下载官网同版本的 Unity插件 使用自动化工具接入首次 你需要打两个标记来定位运行工具 控制台会列出最新的十个Tradplus版本 任选其一然后拖入项目…...
![](https://img-blog.csdnimg.cn/direct/3c194991f6a3421d94d126c5f5cca1de.png)
Matplotlib基础
目录: 一、绘制yx^2图像: 一、绘制yx^2图像: from matplotlib import pyplot as plt import numpy as np #生成(-50,50)的数组 x np.arange(-50,50) #计算因变量y的值 y x ** 2 #根据x、y数组绘制图形yx^2 plt.plot…...
![](https://www.ngui.cc/images/no-images.jpg)
上海东海职业技术学院低代码实训平台建设项目竞争性磋商公告
上海东海职业技术学院低代码实训平台建设项目竞争性磋商公告 招标|招标公告 上海市|闵行区 项目编号:0773-2340GNSHFWCS2823 招标单位:上海东海职业技术学院 代理单位:中金招标有限责任公司 预算金额:59万元 联系方式&…...
![](https://img-blog.csdnimg.cn/direct/6dc3717781c04987a4318a9d54f65f9a.png)
c语言之将输入的十进制转换成二进制数并打印原码反码补码
十进制转二进制 首先,我们要知道的是十进制转换成二进制数的方法。我们一般采用的除二取余的方法,在这里我用32位数组来进行转换。 int main() {printf("请输入一个十进制数\n");int n 0;scanf("%d", &n);int arr[32];int* p…...
![](https://www.ngui.cc/images/no-images.jpg)
算法题明明的随机数
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。 import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; // 注意类名必须为 Main, 不要有任何 pa…...
![](https://img-blog.csdnimg.cn/img_convert/4da55a4da53c1e7a98965cbd4db180f0.jpeg)
B站不赚钱、“芒果”赚钱难,视频“后浪”火拼跨年夜
又是一年跨年时。 各大视频平台跨年晚会展开火拼,今年谁是赢家? 作为视频“后浪”,芒果超媒(300413.SZ)、哔哩哔哩(09626.HK,下称“B站”)此前相继公布了2023年三季报,…...
![](https://www.ngui.cc/images/no-images.jpg)
ajax请求的详细流程+详细示例
AJAX(Asynchronous JavaScript and XML)是一种用于创建异步 Web 应用程序的技术。下面是 AJAX 请求的详细流程: 创建 XMLHttpRequest 对象:在 JavaScript 代码中,使用 new XMLHttpRequest() 创建一个 XMLHttpRequest 对…...
![](https://img-blog.csdnimg.cn/aa042f6eeb7841f5acce2b32fbce66e5.png)
这些产品手册制作工具,你都值得收藏
产品手册是企业向消费者传达产品信息的重要媒介,它能够直接影响消费者对产品的了解和购买决策。然而,制作一份专业而吸引人的产品手册并非易事,需要一定的设计和排版能力。为了帮助企业和个人更轻松地制作出优质的产品手册,下面将…...
![](https://img-blog.csdnimg.cn/img_convert/a3b05ef50d590c6a77db33919c502109.png)
跨账号和同账号的ECS云服务器之间迁移教程
阿里云ECS实例间迁移场景如下: 场景一:跨账号ECS实例间迁移 此场景适用于跨账号,同地域或者跨地域下的ECS实例间的迁移。例如:将阿里云账号A下的ECS实例,迁移阿里云B账号下。 场景二:同账号ECS实例间迁移 …...
![](https://www.ngui.cc/images/no-images.jpg)
python virtualenv 虚拟环境命令
# 安装 virtualenv pip3.9 install virtualenv # 创建虚拟环境test mkdir /envs # 创建一个文件夹放置虚拟环境 cd /envs/ virtualenv /envs/test # --pythonpython3.9 # 激活虚拟环境test source /envs/test/bin/activate # 安装依…...
![](https://img-blog.csdnimg.cn/img_convert/564e824bcb0df6f4917b74ad38ea63ad.jpeg)
深入理解MySQL索引底层数据结构
听课问题(听完课自己查资料) 什么是二叉树 二叉树是怎么存储数据的一个链表是一个集合的数据结构 List是怎么便利找到指定下标元素为什么会快?什么是红黑树 红黑树是怎么存储数据的什么是B TREE 是怎么存储数据的什么是BTREE 是怎么存储数据的 疑惑答案 a. 二叉树…...
![](https://img-blog.csdnimg.cn/img_convert/a5a1f45bc534d2863198e2ebdb60af0a.png)
使用 Tkinter 制作一个进制转换工具,好用!
在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,比如批量处理文件,批量处理图片等等。当我们进行这些工具的编写之时,往往只关注了功能的实现,而忽略了页面…...
![](https://img-blog.csdnimg.cn/20181122104410235.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2F4aWFvYm9nZQ==,size_16,color_FFFFFF,t_70)
商洛网站设计/怎么让网站被百度收录
之前提到java.util.concurrent包中的原子类,就是通过CAS来实现了乐观锁,那么我们进入原子类AtomicInteger的源码,看一下AtomicInteger的定义: 根据定义我们可以看出各属性的作用: unsafe: 获取并操作内存的…...
![](/images/no-images.jpg)
有没有专门做奶粉的网站/快速排名工具免费查询
第一次被破坏 其实发生在双亲委派模型出现之前–即JDK1.2发布之前。由于双亲委派模型是在JDK1.2之后才被引入的,而类加载器和抽象类java.lang.ClassLoader则是JDK1.0时候就已经存在,面对已经存在 的用户自定义类加载器的实现代码,Java设计者…...
![](https://img2018.cnblogs.com/blog/1244272/201907/1244272-20190721190405648-1686002653.png)
聊城网站制作公司电话/苏州seo怎么做
1.重载操作符返回*this 2.返回类成员变量的引用,最好加const,不破坏类成员的封装性 如下:复制于 C 中引用有什么用? - 谢之易的回答 - 知乎 https://www.zhihu.com/question/34267829/answer/58414818 转载于:https://www.cnblogs…...
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
设计网站推荐外网/十大营销策略
参考网址:http://www.360doc.com/content/10/1214/23/3843418_78215161.shtml 我是下载的virtualdub 能用 哈哈 步骤: 1:file open video file 2:video filters add convert format 选择4:2:0 YV12 3:SAVE AVI OK...
乾安网站建设哪家专业/百度推广登录入口下载
http://blog.csdn.net/kernel_jim_wu/article/details/7447377 1、TCP报文格式: 图1 TCP报文格式 源端口: 数据发送方的端口号。 目的端口: 数据接受方的端口号。 序号:本数据报文中的的第一个字节的序号(在数据流…...