计算机网络-IPV4
计算机网络-IPV4分类编址的IPV4主要方法: 通过划分32Bit的IPV4地址,分为网络号和主机号 网络号:标记主机(或路由器的)的接口所连接到的网络 主机号: 标记主机(或路由器) 主要有五类地址: A类地址:网络号8bit,主机号24bit,网络号的第一位固定为0 B类地址:网络号16bit,主机号16bit,网络号前俩位为10 C类地址:网络号24bt,主机号8bit,网络号前三位110 D类地址,多播地址,前面四位1110 E类地址:保留地址,前面四位1111 特点: A、B、C类地址才分配给主机(路由器) 主机号全0是网络地址,不能分配给主机(路由器) 主机号全1是广播地址,不能分配给主机(路由器) A类地址 最小网络号:1.0.0.0 最大网络号:126.0.0.1 全0保留地址,所以00000001(1.0.0.0)是最小网络号 01111111(127.0.0.1),是本地回环地址,不能指派 本地最小回环测试地址:127.0.0.1 本地最大回环测试地址:127.255.255.254 01111110(126.0.0.0),...
Go的Context包
Go的Context包背景context 包是标准库中一个非常重要的组件,用于在不同 Goroutine 之间传递取消信号、超时警告和其他请求范围的值。它主要用于控制并发任务的生命周期,尤其是在复杂的网络服务和多层调用栈中。context 包的使用能够帮助开发人员写出更加清晰、健壮和易于维护的并发代码。下面介绍 context 包的基本用法和设计理念。 为什么需要使用context在并发程序中使用 Context 主要有两个目的:一是用来取消操作,二是用来传递请求范围的数据。 取消操作:当一个 Context 被取消时,所有基于该 Context 的操作都应该被取消。这是通过检查 ctx.Done() 返回的通道是否被关闭来实现的。如果该通道被关闭,表示 Context 已经被取消,相应的操作也应该停止。 传递数据:通过 context.WithValue 函数,可以将请求范围的值与 Context 相关联。这可以用来传递如请求ID、认证令牌等信息。 常见用法创建contextcontext 包通过 Context 接口提供功能。能直接创建一个 Context 实例,而是需要...
VM拓展Centos磁盘
VM拓展Centos磁盘背景VM虚拟机在使用一段时间后,磁盘不够,需要拓展root 操作步骤 虚拟机关机 选择拓展磁盘大小 lsblk查看当前的分盘情况 (1)fdisk /dev/sda进入磁盘配置; p (print) 输出当前磁盘分区情况; d(delete) 删除sda3磁盘(空间大小为:4810752-41943039) 。(2)n(new) 新建磁盘; p(primary) 进行新建主分区磁盘;(一块硬盘顶多只能分四块主分区) 3新建磁盘空间名3新建磁盘(空间大小为:4810752-56623103);(3) w (write)保存,保存写入新的配置,磁盘分配配置 reboot重启刷新 拓展磁盘 12345678## 拓展磁盘(Centos)pvcreate /dev/sda3 # 创建pvvgextend centos /dev/sda3 # 扩容vglvextend -l +100%FREE /dev/centos/root # 扩容lvxfs_growfs /dev/centos/roo...
Go-控制协程数量
Go-控制协程数量背景GMP的无限创建Goroutine基于共享用户态资源,过多的协程会导致CPU利用率浮动上涨、内存占用上涨、主进程崩溃 如何控制Goroutine数量基于buffer的channel原理:通过buffer的缓冲区的大小和阻塞等待来控制最大的数量 1234567891011121314151617181920212223242526package mainimport ( "fmt" "runtime" "time")func doGoroutine(i int, ch chan bool) { fmt.Println("go func", i, "goroutine count", runtime.NumGoroutine()) // 结束了一个任务 <-ch}func main() { task_cnt := 10 // 容量控制了 Goroutine 的数量 ch := make(chan bool, 3) // for的...
分布式-CAP理论
分布式-CAP理论背景在大规模拓展服务下存在三个特性: C(Consistency):一致性 A(Availability):可用性 D(Partition Tolerance):分区容错性 一致性一致性: All nodes see the same data at the same time 所有节点数据,在同一时刻,读数据都是最新的 流程: 对主存储写数据 进行上锁,要求对从存储进行同步 同步成功,释放锁,返回成功 可用性可用性:Reads and writes always succeed 服务永远可用,用户感知不到异常 流程: 用户向master请求 master从从存储请求 分区容错性分区容错性:The system continues to operate despite arbitrary message loss or failure of part of the system 在分布式系统中,尽管部分节点出现任何消息丢失或者故障,系统还应继续运⾏ 流程: 尽使⽤异步取代同步操作,例如使⽤异步⽅式将数据从主数据库同步到从数据...
分布式-Base理论
分布式-Base理论介绍CAP无法同时满足,为了同时实现CAP系统,所以出现了BASE BA(Basically Available):基本 可用 S(Soft State):软状态 E(Eventually Consistent):最终一致性 ACID和BASE是对冲理论: ACID追求强一制性 BASE牺牲强一致性,追求高可用性 Basically Available 通过妥协响应时间和功能损失 场景: 断电,增大响应时间 高并发下,电商提示抢购失败 Soft State软状态本质就是系统中的数据有中间状态,多节点的副本数据等待同步数据延迟 Eventually Consistent软状态数据不可以一直持续,必须在一段时间内完成同步,达到最终一致性
分布式 id 生成器(snowflake,雪花算法)
分布式 id 生成器(snowflake,雪花算法)背景在某些场景下,需要生成增长ID并且不能重复 snowflakeSnowflake 雪花算法,由Twitter提出并开源,可在分布式环境下用于生成唯一ID的算法。该算法生成的是一个64位的ID,故在Java下正好可以通过8字节的long类型存放。所生成的ID结构如下所示 1 bit:首位无效因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。 41 bit:表示的是时间戳,单位是毫秒41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。 10 bit:记录工作机器 id,代表的是这个服务最多可以部署在 2^10 台机器上,也就是 1024 台机器10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意思就是最多代表 2 ^ 5 个机房(32 个机房),每个机房里可以代表 2 ^ 5 个机器(32 台机器),也可以根据自己公司的实际情况确定。 12 b...
ACID理论
ACID理论背景ACID主要是事务中的概念,分别是 A(Atomicit):原子性 C(Consistency):一致性 I(Isolation):隔离性 D(Durability):持久性 A原子性主要是在一个事务中,“要么全部完成、要么全部不完成” 经典的银行转账案例: A:从A账户去一百 B:从存入100 AB是在一个事务里面,不能只有A|B其中一个成功,不然银行账户对不上金额 C一致性一致性代表:事务开始前和事务结束之后,数据库的一致性没有改变,事务中的数据一致性 I隔离性隔离性代表:多个并发事务同时拥有对数据进行读书和修改的能力,如果⼀个事务要访问的数据正在被另外⼀个事务修改,只要另外⼀个事务未提交,则它所访问的数据就不受未提交事务的影响 D持久性持久性代表:事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失 优点1、数据一致性:ACID 确保数据在任何事务执行后保持一致和准确。 2、数据完整性:ACID 通过确保对数据库的任何更改都是永久性的,并且不会丢失,从而维护了数据的完整性。 3、并发控制:ACID 通过防止事务之间的干扰来帮助管理并发创建的多个事务...
初识RPC
初识RPC介绍RPC 是远程过程调用的简称,是分布式系统中不同节点间流行的通信方式。在互联网时代,RPC 已经和 IPC 一样成为一个不可或缺的基础构件。因此 Go 语言的标准库也提供了一个简单的 RPC 实现,我们将以此为入口学习 RPC 的各种用法。 hello RPC server端代码 12345678910111213141516171819202122232425262728293031package mainimport ( "log" "net" "net/rpc")type HelloService struct{}func (p *HelloService) Hello(request string, reply *string) error { *reply = "hello:" + request return nil}func main() { rpc.RegisterName("HelloService"...
Gocv安装(Windows)
Gocv安装(Windows)什么是GoCVgocv 是 OpenCV 4.x 计算机视觉库的包装器。 它为最新版本的 OpenCV 提供了 Go 语言接口 官网链接:https://gocv.io/ 安装1.安装Go(PASS)2.安装GoCV12go get -u -d gocv.io/x/gocv# 执行完这条命令后,%GOPATH%\pkg\mod下会出现一个文件夹"[http://gocv.io](https://link.zhihu.com/?target=http%3A//gocv.io)" 3.安装MinGW-W64注意安装版本:8.1.0 MinGW-W64版本 添加环境变量到系统环境变量 4.安装Cmake安装链接 5 安装opencv(谨记,要手动添加环境变量,不要忘了!)12chdir %GOPATH%\src\gocv.io\x\gocvwin_build_opencv.cmd 主要是win_build_opencv.cmd文件: 可以把文件opencv-4.6.0.zip和opencv_contrib-4.6.0.zip...