Linux系统之Bonding 网卡绑定配置方法

Linux系统之Bonding 网卡绑定配置方法

一、检查本地系统环境

1.检查系统版本

[root@Server001 ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2.查看服务器网卡

[root@Server001 network-scripts]# ifconfig  -a
bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST>  mtu 1500
        inet 192.168.30.122  netmask 255.255.255.0  broadcast 192.168.30.255
        ether a6:ad:e5:84:f0:6e  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.55  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::2a6e:d4ff:fe89:8720  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:89:87:20  txqueuelen 1000  (Ethernet)
        RX packets 2256  bytes 439140 (428.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 428  bytes 68770 (67.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2a6e:d4ff:fe8a:3299  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:8a:32:99  txqueuelen 1000  (Ethernet)
        RX packets 1617  bytes 386452 (377.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2a6e:d4ff:fe88:f490  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:88:f4:90  txqueuelen 1000  (Ethernet)
        RX packets 1617  bytes 386452 (377.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

二、创建网卡配置文件

1.进入网卡配置文件目录

[root@Server001 ~]# cd /etc/sysconfig/network-scripts/
[root@Server001 network-scripts]# ls
ifcfg-bond0  ifdown-eth   ifdown-ppp       ifdown-tunnel  ifup-ippp   ifup-post    ifup-TeamPort      network-functions-ipv6
ifcfg-eth0   ifdown-ippp  ifdown-routes    ifup           ifup-ipv6   ifup-ppp     ifup-tunnel
ifcfg-lo     ifdown-ipv6  ifdown-sit       ifup-aliases   ifup-isdn   ifup-routes  ifup-wireless
ifdown       ifdown-isdn  ifdown-Team      ifup-bnep      ifup-plip   ifup-sit     init.ipv6-global
ifdown-bnep  ifdown-post  ifdown-TeamPort  ifup-eth       ifup-plusb  ifup-Team    network-functions

2.拷贝eth0的网卡配置文件

[root@Server001 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@Server001 network-scripts]# cp ifcfg-eth0 ifcfg-eth2
[root@Server001 network-scripts]# cp ifcfg-eth0 ifcfg-bond0

3.修改bond0网卡配置文件

[root@Server001 network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
BOOTPROTO=none
TYPE=bond0
ONBOOT=yes
IPADDR=192.168.30.122
NETMASK=255.255.255.0

4.修改eth1网卡配置文件

[root@Server001 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
TYPE=Ethernet
MASTER=bond0
SLAVE=yes

5.修改eth2网卡配置文件

[root@Server001 network-scripts]# cat ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
TYPE=Ethernet
MASTER=bond0
SLAVE=yes

三、创建bonding的配置文件

1.编辑bonding.conf

[root@node network-scripts]# vim /etc/modprobe.d/bonding.conf
[root@node network-scripts]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=1 miimon=100

注:关于mode的说明

mode=0 //平衡循环

mode=1 //主备

mode=3 //广播

mode=4 //链路聚合

2.停止 NetworkManager 服务

systemctl stop NetworkManager
systemctl disable NetworkManage

3.加载 bonding 模块

[root@Server001 network-scripts]# lsmod |grep bonding
[root@Server001 network-scripts]#  modprobe bonding
[root@Server001 network-scripts]#  lsmod |grep bonding
bonding               152656  0 

4.重启网络服务

systemctl restart network

四、查看网卡绑定情况

1.再次检查本地网卡

[root@Server001 network-scripts]# ifconfig 
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.30.122  netmask 255.255.255.0  broadcast 192.168.30.255
        inet6 fe80::2a6e:d4ff:fe8a:3299  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:8a:32:99  txqueuelen 1000  (Ethernet)
        RX packets 2426  bytes 748394 (730.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 838 (838.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.55  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::2a6e:d4ff:fe89:8720  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:89:87:20  txqueuelen 1000  (Ethernet)
        RX packets 2853  bytes 740694 (723.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 478  bytes 75189 (73.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 28:6e:d4:8a:32:99  txqueuelen 1000  (Ethernet)
        RX packets 2229  bytes 689858 (673.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 838 (838.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 28:6e:d4:8a:32:99  txqueuelen 1000  (Ethernet)
        RX packets 2243  bytes 690766 (674.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.查看网卡绑定状态

[root@Server001 network-scripts]# cat  /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 28:6e:d4:8a:32:99
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 28:6e:d4:88:f4:90
Slave queue ID: 0

五、测试网卡连通情况

1.本地客户端ping服务器

ping 192.168.30.122

六、关闭eth1网卡测试连通情况

1.关闭eth1网卡

[root@Server001 network-scripts]# ifdown eth1
[root@Server001 network-scripts]# 

2.查看本地客户端连通情况

可以正常ping通

3.查看当前的bond0状态

当前活动网卡已经切换到eth2,eth2网卡提供服务

[root@Server001 network-scripts]# cat  /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 28:6e:d4:88:f4:90
Slave queue ID: 0

七、关闭eth2网卡测试连通情况

1.开启eth1网卡,关闭eth2网卡

[root@Server001 network-scripts]# ifup eth1
[root@Server001 network-scripts]# ifdown eth2

2.测试本地客户端连通情况

可以正常ping通

3.查看当前的bond0状态

当前活动网卡已经切换到eth1,eth1网卡提供服务

[root@Server001 network-scripts]# cat  /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 28:6e:d4:8a:32:99
Slave queue ID: 0
本文转载于网络 如有侵权请联系删除

相关文章

  • Python OpenCV给证件照换底色

    投简历、找工作这些事都需要证件照,有些还要求证件照背景颜色、尺寸大小,本文分享一下如果通过PythonOpenCV来实现照片裁剪和更换背景色1、读取照片importcv2 importnumpyasnp #读取照片 image=cv2.imread('1.jpg')复制2、修改照片尺寸 发现图片太大,修改图片尺寸image=cv2.resize(image,None,fx=0.5,fy=0.5)第一个参数image:为原始图像第二个参数size:尺寸数组,我设置None第三个和第四个参数fx,fy:新图为原图的比例。比例和尺寸只能设置一个#修改尺寸 image=cv2.resize(image,None,fx=0.5,fy=0.5)复制3、BGR图片转灰度图 彩色图无法进行梯度闭运算。闭运算:对图像先进行膨胀再腐蚀,有助于关闭前景物体上的小孔或者小黑点形态学变换:开运算,闭运算,梯度运算所以先将图片转换为hsv格式cv2.cvtColor(img,cv2.COLOR_BGR2HSV)可以将彩色图片转化为hsv灰度图片转换成hsv是因为,hsv的色彩空间有表可查。#图

  • 宋朝名画“虎戴VR”,在外网火了

    金磊Alex发自凹非寺 量子位|公众号QbitAI谁能曾想,宋朝的老虎们,有一天能在国外被玩儿火了。事情是这样的。前不久谷歌不是出了个AI创作神器Imagen嘛。只要你给一句话,它就能生成符合语意的图片。然后脑洞大开的国外网友们,不按套路地给Imagen出了道题:给宋代的东方老虎佩戴VR。Imagen也没在怕的,“啪的一下”就给出了一幅力作——《虎戴VR》。还别说,这幅《虎戴VR》还真是有点那味了。不仅是画风上,VR头戴跟老虎以及整幅画作能够保持一致。就连手柄、双虎嬉戏的感觉也都一步到位地画了出来。然后还有两只老虎戴VR,手牵着手一起“恰恰恰”的:甚至Imagen还别出心裁地设计了个“连线”版VR(可能在面对面看片吧):但毕竟在AI作画这事上,除了谷歌Imagen之外还有很多神器。于是,一场《虎戴VR》作画大战就此拉开序幕。(猜猜谁家的画更有“心有猛虎,细嗅蔷薇”的味道)DALL-E也来请战首先来应战的,定然是OpenAI家的DALL·E。网友Jacob出于好奇,便用它做了几幅来做比较。首先是满满“定妆照”风格的《虎戴VR》(很飒啊):不难看出,DALL·E的画作和Imagen在风格上

  • 报告PPT--非计算机专业Python程序设计课程教学要点与教学方法

  • 操作系统:Win11首个预览版来了!附升级方法

    北京时间6月29日凌晨一点,微软开始向Win10Dev通道的用户推送Win11预览版更新。本次更新的版本号为10.0.22000.51(co_release)。如果你想要体验Win11首个预览版,那么首先需要加入WindowsInsider预览体验计划。然后,打开设置>更新和安全>Windows预览体验计划,点击开始后,链接相关账户,选择Dev渠道。选择预览通道后,Windows会进行重启。之后,前往Windows更新界面进行检查更新,即可搜索到Win11Dev预览版更新。根据微软官方文档,Win11首个预览版带来的特性包括:一、全新的UI设计包括开始菜单、任务栏、通知中心、文件资源管理器、设置页面等等。二、小工具只需单击任务栏上的小部件图标,或按键盘上的Win+W,用户的小部件就会从桌面左侧滑出。用户可以通过添加或删除小部件、重新排列、调整大小和自定义内容来进行个性化设置。微软提供的一组小组件包括日历、天气、交通、待办事项列表、OneDrive的照片、体育和电子竞技、股票观察列表和提示等。三、多任务处理使用这些新的多任务处理功能,可以提高用户的生产力和创造力。比如自动布局

  • 临近年关,发生两起磁盘占满引发的服务下线故障

    一口气说两个因为磁盘空间不足引发的应用故障。作为拿起键盘一把梭的Coder,开发--->部署-->收工--->心旷神怡,滋一口82年的可乐.过了几个月,服务突然下线了!CTO又有杀程序员祭天的理由了!事故1:AzureAppServiceAzureAppService运行一段时间之后,你也许会遇到磁盘占满的错误,表象如下:应用程序触发System.Io.IOException:Thereisnotenoughspaceonthedisk异常你会在KUDU控制台发现磁盘错误(红色警告)当你使用VisualStudio部署新的代码,你会得到失败结果。 ERROR_NOT_ENOUGH_DISK_SPACE:Webdeploymenttaskfailed.(WebDeploydetectedinsufficientspaceondisk)每个AppServicePlan只获得与定价层匹配的磁盘空间分配,故面向AzureAppService开发的应用需要关注空间消耗!SharedBasicSTANDARDPREMIUMDiskSpace1G10G50G250G一个AppSer

  • laravel csrf排除路由,禁止,关闭指定路由的例子

    百度了下,发现别的教程里需要更改文件,实际上很简单,官方提供了接口可以用来设置;laravel的csrf防范是通过app/http/Middleware目录下的中间件VerifyCsrfToken.php来生效的,如下所示在官方的代码有个属性$except,可以专门用来设置哪些路由不用做csrf验证;<?php namespaceApp\Http\Middleware; useIlluminate\Foundation\Http\Middleware\VerifyCsrfTokenasBaseVerifier; classVerifyCsrfTokenextendsBaseVerifier { /** *TheURIsthatshouldbeexcludedfromCSRFverification. * *@vararray */ protected$except=[ 'api/v1/screen', 'api/v1/notice', ]; }复制例如如上所示,当浏览器的url为域名/api/v1/screen的时候,就不会验证csr

  • 发送短信验证码和邮箱验证码—Java实现

    短信验证码 短信验证码都是调用一些接口来进行短信的发送,短信验证码在登录、注册等操作中使用的最广泛,本文这一节演示如何使用Java制作一个简单的短信验证码登录。 我这里演示使用的是聚合数据的短信接口(并非广告),因为聚合数据的接口调用比较方便和简单,所以首先得先去聚合数据里申请一个短信接口API:申请时会需要你进行实名认证,如果你不想认证的话跳过认证也是可以的。申请完短信API进入以下界面后点击“模板”: 需要先申请一个短信模板,根据自己的需求定义这个模板内容(定义前先阅读此页面下方的模板规则说明):提交审核后,在此页面的下方可以看到模板列表和模板的审核状态:然后点击“我的数据”,再点击短信API服务中的“接口”:接口的调用说明都在这个页面里,需要按照这里的规则去调用这个API: 等短信模板申请下来后就可以使用这个API了,以下演示如何使用Java来调用这个API,制作一个简单的短信验证码登录:首先是页面的index.jsp代码:用于调用短信接口的类:处理发送验证码请求的Servlet:最后是处理登录业务的Servlet:运行结果:收到的验证码:输入验证码进行登录:控制台打印内容:邮箱

  • 「生信」GISTIC2.0安装与使用(2019)

    在一年前刚开始认识GISTIC这个软件的时候,我写过一篇文档记录安装过程。Google搜索的第1个中文信息就是(2018年,现在不是,文章现在已经有过千次的引用啦~)。实际上,GISTIC2已经更新了几个版本,特别是使用了bash替换了之前的csh,这样就不需要再像我以前那样修改和配置了。最近又准备研究一波CNV,好好分析一下,会利用GISTIC2,所以我重新写一篇安装的教程。下载wget-cftp://ftp.broadinstitute.org/pub/GISTIC2.0/GISTIC_2_0_23.tar.gz 复制解压mkdirGISTIC2 mvGISTIC_2_0_23.tar.gzGISTIC2/&&cdGISTIC2/ tarzxfGISTIC_2_0_23.tar.gz 复制此时目录下有这些文件$ls examplefilesLICENSE.txt example_resultsMATLAB_Compiler_Runtime gistic2MCR_Installer GISTIC_2_0_23.tar.gzREADME.txt GISTICDocume

  • 链表竟然比数组慢了1000多倍?你敢信?

    数组和链表是程序中常用的两种数据结构,也是面试中常考的面试题之一。然而对于很多人来说,只是模糊的记得二者的区别,可能还记得不一定对,并且每次到了面试的时候,都得把这些的概念拿出来背一遍才行,未免有些麻烦。而本文则会从执行过程图以及性能评测等方面入手,让你更加深入的理解和记忆二者的区别,有了这次深入的学习之后,相信会让你记忆深刻。数组 在开始(性能评测)之前我们先来回顾一下,什么是数组?数组的定义如下:数组(Array)是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。 最简单的数据结构类型是一维数组。例如,索引为0到9的32位整数数组,可作为在存储器地址2000,2004,2008,...2036中,存储10个变量,因此索引为i的元素即在存储器中的2000+4×i地址。数组第一个元素的存储器地址称为第一地址或基础地址。简单来说,数组就是由一块连续的内存组成的数据结构。这个概念中有一个关键词“连续”,它反映了数组的一大特点,就是它必须是由一个连续的内存组成的。数组的数据结构,如下图所示:数组添

  • Policy Gradient实战

    目录1.前言2.算法2.1算法主循环2.2PolicyGradient部分3.结果分析1.前言今天利用上篇文章讲解的PolicyGradient理论进行实战,背景仍然是杆子不倒游戏和小车登顶游戏。 2.算法理论部分上篇文章已经介绍过了,这里不多赘述,感兴趣的读者可以去看我上一篇文章。 2.1算法主循环我们先定义一下算法的主循环,这里要注意我们采取的是回合更新,而不是Q-Learning等的单步更新1importgym 2fromRL_brainimportPolicyGradient 3importmatplotlib.pyplotasplt 4 5DISPLAY_REWARD_THRESHOLD=400#当回合总reward大于400时显示模拟窗口 6RENDER=False#在屏幕上显示模拟窗口会拖慢运行速度,我们等计算机学的差不多了再进行模拟 7 8env=gym.make('CartPole-v0') 9env.seed(1)#普通的Policygradient方法,使得回合的方差比较大,所以我们选了一个好点的随机种子 10env=env.unwrapped

  • golang常用的http请求操作

    Golang诞生已经超过十个年头了,发展得愈发完善,其简单方便的协程并发机制使得其在爬虫领域有着一定的天赋。首先我们来看一看,Golang相对于Python这个爬虫领域的传统强者,有哪些优点和缺点。优点:完善简便的协程并发机制 并发数量大 占用资源少 运行速度更快 部署方便 缺点:数据处理比较繁琐 成熟工具不是很多 资料较少 实现相同逻辑需要的代码更多 由于Golang本身静态语言的特性,和其特别的异常处理方式等等原因,在发起较复杂的请求时需要的代码量自然会比Python多不少,但是其并发的数量也是远超Python的,所以两者应用的场景并不十分相同,我们可以根据需要灵活的选择。在刚刚接触Golang的http包时,觉得其非常的方便,发起请求只需要一行代码:http.Get("https://www.baidu.com") 就算与Python的requests在便利方面也不遑多让,然而在Golang勾起了我的兴趣,并深入接触后,我发现并非如此。最简单的http.Get方法只能发起最简单的请求,一旦要设置headers、cookies等属性时,需要写的代码会成几何倍数上

  • 全方位剖析边缘计算架构设计以及应用实践

    边缘计算概念产出乃至当今的应用,继2005年云计算概念提出后,我认为它已经成为云计算发展过程中的发酵必然产物。公司处于物联网领域大军中的一员,以下将直击边缘计算赋能物联网。云计算、雾计算与边缘计算三者之间成熟度最高的也就是云计算,在云计算的发展过程中发酵出边缘计算(EdgeComputing),甚至碰撞出来一个雾计算(FogComputing)。云计算目前阶段概念层面已经很明确了,通过按量付费等网络提供资源,比如:IaaS、Paas和SaaS。使得企业可以在自己的物理硬件之外,调度远程服务器进行任务处理及存储等。雾计算思科在2011首创,是相对于云计算而言的。它并非是性能强大的服务器,而是由性能较弱、更为分散的各种功能计算机组成,渗入电器、工厂、汽车、街灯及人们生活中的各种物品。通俗的说,它拓展了云计算(CloudComputing)的概念,相对于云计算它离产生数据的地方更近,数据、数据相关的处理和应用程序都集中于网络边缘的设备中,而不是几乎全部保存在云端。这里因“云”而“雾”的命名源自“雾是更贴近地面的云”这句话。边缘计算边缘计算(EdgeComputing)是相对云计算而言的,它是

  • Conccrent中 Unsafe类原理 以及 原子类AutomicXX的原理以及对Unsafe类的使用

    Unsafe类的介绍Java中基于操作系统级别的原子操作类sun.misc.Unsafe,它是Java中对大多数锁机制实现的最基础类。请注意,JDK1.8和之前JDK版本的中sun.misc.Unsafe类可提供的方法有较大的变化,本文基于JDK1.8。sun.misc.Unsafe类提供的原子操作基于操作系统直接对CPU进行操作,而以下这些方法又是sun.misc.Unsafe类中经常被使用的:java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:1、获取Unsafe对象实例Unsafe类是一个单例,调用的方法为getUnsafe(),在获取实例的函数中有一步判断,判断检查该CallerClass是不是由系统类加载器BootstrapClassLoader加载,我们知道bootstrapClass是最高层的加载器,底层由C++实现,没有父类加载器,所有由该系统类加载器加载的类调用getClassLoader()会返回null,所以要检查类是否为bootstrap加载器加载只需要检查该方法是不是返回null。@Caller

  • TF-GNN踩坑记录(一)

    引言 Batchsize作为一个在训练中经常被使用的参数,在图神经网络的训练中也是必不可少,但是在TF-GNN中要求使用merge_batch_to_components()把batch之后的图合并成一张图。表现如下图:    通过上图可以看出,在merge之后的图中的点序号被重新按照顺序编号,同时边的序号也和点序号一样重新编号,且可以发现子图与子图之间并没有新增边的连接,需要注意的是对于图的size,merge只是连接了每个子图的size而不是以加法的形式增加size。 问题 由于需要在edgepooling中使用attention机制,并且尝试自己实现attention机制,需要获取到图的节点数量,然而发现在图数据经过merge_batch_to_components()之后,无法通过正常的方式获取到图的节点数量,通过阅读TF-GNN的源代码发现,TF-GNN提供了另外一种方式获取图的节点数量。 adjacency=graph.edge_sets[edge_set_name].adjacency node_set=graph.node_sets[adjace

  • Spring思想学习笔记(一)

    Spring是一个面向切面(AOP)和控制反转的(IOC)的框架 1.IOC控制翻转,为什么叫控制反转呢,因为决定权改变了。 以前是程序员作为主导,现在是利用set注入,把决定权交给了用户。 举个例子: 我们都知道Spring需要Dao层,Service层。 Dao层放实体,一般是Dao接口和DaoImpl实现类。 Service层放服务,一般是Service接口和ServiceImpl。 Service层调用dao层的接口。   现在具体要求来了,我们有三种水果。苹果,香蕉和桃子。 对应我们就要有fruitDao,AppleIMPL,bananaImpl,peachImpl。 如果不用IOC,我们就需要在Service层的接口写三个服务,也就是new三个Dao接口 fruitDaoapple=newAppleImpl; fruitDaobanana=newfruteImpl; fruteDaopeach=newfruteImpl;//这是随便写的,不能运行哈。复制 现在是三个水果,以后是不是更麻烦? 麻烦是第一个,当用户需求更改的时候,用户说我不喜欢吃苹果,香蕉和桃子,

  • 基于C/C++语言数据结构之线性表(二)

    链表: 链表的创建与使用: 插入元素:   删除元素:     实现链表:   #include<iostream> //请在下面实现结点类Node classNode{ public: intdata;//每节火车车厢人数 Node*next;//指向下一节点 Node(int_data){ data=_data; next=NULL; } }; //请在下面实现链表类LinkedList classLinkedList{ private: Node*head; public: LinkedList(){ head=NULL; } ~LinkedList(){ Node*current_node=head; while(current_node!=NULL){ Node*delete_node=current_node; current_node=current_node->next; deletedelete_node;

  • jQuery插件综合应用(一)注册

    一、介绍 注册和登录是每个稍微有点规模的网站就应该有的功能。登陆功能与注册功能类似,也比注册功能要简单些。所以本文就以注册来说明jQuery插件的应用。 jQuery插件的使用非常简单,如果只按照jQuery插件demo中的演示使用,基本上很快就能上手。但是如果按照我们的需要进行操作,还真需要一些技巧。下面会以nanoscroller进行说明。 提到注册功能,无非就是对用户的注册信息进行验证,验证用户输入的注册信息是否合法,在jQuery插件中,validation插件可以实现验证功能。如果用户的信息合法,只需要用户同意“网站的协议”,就允许进行下一步操作————注册。“网站的协议”显示方式有多种,可以在当前页面,也可以在弹出层中。而本文介绍的是弹出层中显示”协议信息”,Lightbox_me插件可以实现弹出层功能。网站的“协议信息”的内容可能很多,为了提高用户的体验,我们可能需要使用滚动条来显示“协议信息”的部分信息。nanoscroller插件可以实现滚动条功能。 二、使用的插件 所以本文介绍的就是validation插件、Lightbox_me插件和nanoscroller插件的

  • 流媒体之HLS——综述

    [时间:2018-01][状态:Open] [关键词:流媒体,stream,HLS] 0HLS背景及初衷 HLS是由苹果公司发起的流媒体网络传输协议,可参考rfc8261HTTPLiveStreaming。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extendedM3U(m3u8)playlist文件,用于寻找可用的媒体流。 HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。 在网上已经有很多关于HLS的资料,本文主要按照我的理解整理下HLS流媒体协议基础知识。 0.1HLS协议格式要求 视频的封装格式TS 保存ts索引的m3u8文件 视频的编码格式:H264(只要MPEG-TS支持,基本都可以,只是有些格式不是免费的;音频类似) 音频的编码格式:AAC、MP3、AC-3

  • (原创)冬日里的一抹暖(摄影,欣赏)

    1.Abstract   我想,什么时候,能骑上单车,向着日落的方向,一路地往西骑行,到我没有去过的地方,去看我没看过的风景。   我打算着,打算着,看着日历,数着星辰,期待好的天气,掩饰不住激动……  终于,盼望来了,冬日里渗出那么一抹暖,天空湛蓝,云朵恣意浮动,从昏昏沉沉的天气中把骄阳揪出来确实不容易,机会,悄悄地来了,我,不由得抓住,   推出我的单车,褪去平日里的厚棉袄,轻装上阵,犹如燕子一般,突然变得灵动起来,心如箭弦般收紧起来,轻快地射出去。2.Content图1宁静的村庄图2倾斜的大堤图3自由的翅膀图4南水北调源头大闸图5南水北调人工河图6南水北调航道图7嬉戏长江水图8极尽远眺图9舒展图10自由的延伸图11大堤线上的夕阳图12夕阳西下图13江上夕阳3.Conclusion   一天的骑行,尽管是在冬天,汗水也未曾断过,我失去了些什么,但是也留下了些什么,它们,很值得!

  • 大数据学习(一)

    一、基本概念 1.大数据应用,一般涵盖数据采集、数据预处理、数据分析、最终为数据消费者提供各类应用(特别是可视化展示和操作)等过程。 2.大数据体系架构    3.数据采集 (1)数据源:日志文件数据;数据库数据;网络数据(特指爬虫抓取数据);设备数据(通常指设备运行过程自身产生的、发生业务产生的数据。) (2)采集工具: a、Filebeat b、Flume c、KafkaAppender d、Canal e、Scrapy 4.数据传输 数据迁移工具有Sqoop、DataX等;数据传输消息队列有:Kafka、RabbitMQ等  (1)Sqoop是一个分布式的数据迁移工具,主要用于解决关系型数据库与Hadoop平台的数据交互。  (2)DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。主要利用datax实现同构数据源、异构数据源的抽取、数据转换、数据清洗。    (3)Kafka K

  • python 常用内置函数

    lambda表达式 func= lambdax,y:x+y 参数x,y 函数x+y ---->return   filter(func,list)   过滤  #函数,可迭代的对象 y=[11,33,44,55] func=lambdax:x>22 re=filter(func,y) foriinre: print(i)复制     运算函数   abs()    #取绝对值       eg: abs(-5)        >>>5   divmod   #返回除数和余数    eg:  divmod(10,4)    >>>4   max    #取得最大值      eg: max([1,7,3,5])    >>>7   min   

相关推荐

推荐阅读