golang
文章平均质量分 68
Sahm5k
这个作者很懒,什么都没留下…
展开
-
Kafka
Kafka:一个分布式基于发布/订阅模式的消息队列。发布者发布消息进入队列后,每个订阅者都能在一定时间内获取发布的消息(Kafka:消费者通过主动拉取pull队列)。缺点:即使没有消息,消费者仍然需要轮询消息队列pull模式:可以根据 Consumer的消费能力以适当的速率消费消息,消费的方式、速率可以由消费者制定。原创 2023-07-18 11:08:08 · 1436 阅读 · 0 评论 -
golang-websocket
WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。原创 2023-05-17 22:44:08 · 1270 阅读 · 0 评论 -
golang-http包
ServeMux 是一个 HTTP 请求多路复用器(HTTP Request multiplexer)设定客户端的超时时间为3s。设置读超时、写超时都为1s。原创 2023-05-17 15:03:01 · 230 阅读 · 0 评论 -
golang-context包
程序处理API请求时开启了一个goroutine,当这个请求被取消或超时时,所有在该请求上工作的 goroutine 应该迅速退出,以便系统可以回收他们正在使用的资源。假如现在有一个API超时时间为6s,这个API调用了A、B两个工作goroutine,超时时间分别为2s、4s。如果获取订单goroutine被取消,其他所有的子goroutine也应当被取消。2.取消广播(连锁取消)原创 2023-05-13 21:01:25 · 71 阅读 · 0 评论 -
golang-GC垃圾回收
Golang v1.3之前采用传统采取标记-清除法,需要STW,暂停整个程序的运行。在v1.5版本中,引入了三色标记法和插入写屏障机制,其中插入写屏障机制只在堆内存中生效。但在标记过程中,最后需要对栈进行STW。在v1.8版本中结合删除写屏障机制,推出了混合屏障机制,屏障限制只在堆内存中生效。避免了最后节点对栈进行STW的问题,提升了GC效率。原创 2023-04-24 11:00:25 · 691 阅读 · 0 评论 -
golang-GMP模型
G:Goroutine 的缩写。M:工作线程(OS thread)也被称为 Machine。P:Processor(调度器),可以通过 GOMAXPROCS 进行修改。当 M 执行 Go 代码时,会先关联 P。在 Go 中,线程是运行 goroutine 的实体,调度器的功能是把可运行的 goroutine 分配到工作线程上。全局队列(Global Queue):存放等待运行的 G。P 的本地队列:同全局队列类似,存放的也是等待运行的 G,存的数量有限,不超过 256 个。原创 2023-04-22 17:18:51 · 571 阅读 · 0 评论 -
golang-Channel注意事项
管道主要分为无缓冲(阻塞)管道、带缓冲的管道两种。原创 2023-04-21 18:06:57 · 146 阅读 · 0 评论 -
golang闭包
一个函数和对其周围状态(词法环境)的引用捆绑在一起,这样的组合就是闭包闭包 = 函数 + 引用的外部环境外部引用的变量将会在堆上存储,仅在内存中存放一份。原创 2023-04-13 10:09:59 · 459 阅读 · 0 评论 -
mit6.824 lab2c-数据持久化
简单的说,raft需要将voteForentries(当前的所有日志)保存到硬盘进行持久化存储。保存的方法:在变量改变时,利用persist()中的gob将变量序列化,存储在persister结构体中。(实验不需要真正保存在硬盘上,用persister结构体代替。读取的方法:在服务器重启时,利用readPersist()读取保存的序列化参数,并解码成对应变量输入raft中。test 2c 报错的主要原因是2b、2a的问题,总结下通过c找出的问题。原创 2023-04-03 10:59:32 · 642 阅读 · 0 评论 -
mit6.824-lab2b日志一致性
client调用start()添加日志后,raft如何保证日志如何被安全、可靠、快速的添加到raft集群中。原创 2023-03-25 10:45:04 · 471 阅读 · 0 评论 -
mit6.824 lab2a-raft选举
3.如果candidate的任期合法并且leader在最新任期没有进行投票,则投票给candidate。1.向当前服务器请求投票,如果candidate的任期原创 2023-03-06 10:17:04 · 272 阅读 · 0 评论 -
6.824lab1总结
lab1实验的实现思想以及分布式问题的解决方案。原创 2023-02-22 15:21:21 · 361 阅读 · 0 评论 -
golang-channel管道
1.定义:Go语言提倡使用通信的方法代替共享内存,当一个资源需要在 goroutine 之间共享时,通道在 goroutine 之间架起了一个管道,并提供了确保同步交换数据的机制。声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。管道没有像pthread一样共享内存,而是在内部运用了互斥锁、环形队列的机制。type hchan struct { qcount uint // 当前队列中剩余元素个数 dataqs原创 2020-08-14 15:30:43 · 236 阅读 · 0 评论 -
golang基础-匿名函数
1.定义:匿名函数就是没有函数名字的函数定义func (参数)(返回值){}2.匿名函数可以直接在声明的时候调用func (a int){//没有返回值 print(a)}(3)//直接调用输出33.匿名函数可被函数变量接受(命名)var f func(a int)f=func (a int){ print(a)}f(3) //输出34.匿名函数可以作为map的值var skill = map[string]func(){ "fire": func() {原创 2020-07-28 15:38:31 · 131 阅读 · 0 评论 -
golang基础2
1.range关键字用于打印数组、mapa:=[]int{1,2,3}b:=map[string]int{"a":1,"b":2}for index,value:=range a{ print(index,value) 打印数组下标以及值}for i,j:=range b{ print(i,j) 打印map在key、value}2.map初始化:var maplist map[int]string=map[int]string{1,"123"} maplist:=map[in原创 2020-07-22 10:55:52 · 84 阅读 · 0 评论 -
go语言基础
1.切片格式a[index x:index y]包括了x不包括ya:=[]int{1,2,3,4,5}print(a[1:3])输出结果为[2,3]2.append函数可用于切片的中间删除与添加1.向前追加append(a[:0],a[3:]...) 向a[3:]切片中插入空切片 返回a[3:] [4,5]2.向后追加append(a,1,2,3) 返回[1,2,3,4,5,1,2,3]append(a,[]int{1,2,3}) 与上面相同3.向中间部分追加a=append(原创 2020-07-20 15:02:54 · 171 阅读 · 0 评论