09 2020 档案
摘要:select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。 epoll是Linux目前大规模网络并发程序开发的首选模型。在绝大多数情况下性能远超select和poll。目前流行的高性能web服务器Nginx正式依赖于epoll提供的高效网络套接字轮询服务。但是,在并发
阅读全文
摘要:模型⼀、单线程Accept(⽆IO复⽤) 模型分析: ① 主线程main thread执⾏阻塞Accept,每次客户端Connect链接过来,main thread中accept响应并建⽴连接 ② 创建链接成功,得到Connfd1套接字后, 依然在main thread串⾏处理套接字读写,并处理业务
阅读全文
摘要:进程、线程、协程 内存 进程: (1)操作系统会以进程为单位,分配系统资源 (CPU时间⽚、内存等资源),进程是资 源分配的最⼩单位。 (2)进程的安全性⽐较⾼ (3)通信成本就⽐较⼤ IPC 信号 |管道| 共享内存| socket⽹络通信| 共享⽂件 线程: (1)操作系统调度(CPU调度)执⾏
阅读全文
摘要:ACID理论 原⼦性(Atomicity) ⼀致性(Consistency) 隔离性(Isolation) 持久性(Durability) CAP理论 (1) ⼀致性Consistency “all nodes see the same data at the same time” ⼀旦数据更新完成
阅读全文
摘要:流?I/O操作? 阻塞? (1)流 ▪ 可以进⾏I/O操作的内核对象 ▪ ⽂件、管道、套接字…… ▪ 流的⼊⼝:⽂件描述符(fd) (2)I/O操作 所有对流的读写操作,我们都可 以称之为IO操作。 (3)阻塞 阻塞等待 不占⽤CPU宝贵的时间⽚ ⾮阻塞忙轮询 占⽤CPU,系统资源 在处理意⻅数据的
阅读全文
摘要:数据定义 1.函数返回值问题: 在函数有多个返回值时,只要有⼀个返回值有名 称,那么其他返回值也⼀定要有名称 2.结构体的⽐较问题 : 结构体⽐较规则之⼀: 只有相同的类型的结构体才可以⽐较(1 结构体的属性类型, 2 属性的顺序) 结构体⽐较规则之⼆: 即使两个结构体的属性类型和顺序相同,但是⾥⾯
阅读全文
摘要:Go modules 是 Go 语⾔的依赖解决⽅案,发布于 Go1.11,成⻓于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在⽣产上使⽤。 解决了什么问题 ? Go 语⾔⻓久以来的依赖管理问题。 “淘汰”现有的 GOPATH 的使⽤模式。 统⼀社区中的其它的依赖管理⼯具(提供迁移
阅读全文
摘要:1.defer执行顺序:与调用顺序相反 2.defer和return :return先于defer执行 3.函数的返回值的初始化:函数的有名返回值,是在函数刚开始调用的时候初始化的,默认值是0,生命周期在函数作用域有效。 4.有名函数返回值遇见defer的情况:defer在return之后执行,返回
阅读全文
摘要:Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。 Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有ext
阅读全文
摘要:Go V1.3 之前的标记清除(mark and sweep) 流程: 第⼀步,暂停程序业务逻辑, 找出不可达的对象,和可达对象。 第⼆步, 开始标记,程序找出它所有可达的对象,并做上标记。 第三步, 标记完了之后,然后开始清除未标记的对象. 第四步, 停⽌暂停,让程序继续跑。然后循环重复这个过程,
阅读全文
摘要:变量的逃逸现象 将⼀个局部变量的地址返回给上层函数,依然能够访问,那么这个局 部变量产⽣的了逃逸现象,当前变量应该并没有分配到栈上。 new出来的变量是在“栈”还是“堆”? golang中的new,创建⼀个空间,未必是在堆上开辟的 结论:Golang中⼀个函数局部变量,不管是不是动态new出来的,还
阅读全文
摘要:⼀、Golang“调度器”由来 协程(co-routine), 引发的问题?(M:线程 N:协程) N:1 1.⽆法利⽤多个CPU 2.出现阻塞的瓶颈 1:1 1.跟多线程/多进程模型⽆异 2.切换协程成本代价昂贵 M:N 1.能够利⽤多核 2.过于依赖协程调度器的优化和算 法 go-routine
阅读全文
摘要:(1)内存的占⽤情况 top -p $(pidof 进程名) 查看某个进程的内存占⽤情况 mem 内存的总体情况 free 空闲内存 used 目前占用情况 (2)GODEBUG和gctrace来分析golang程序的内存使用情况 GODEBUG='gctrace=1' ./test2_Mem 输出
阅读全文
摘要:一、分析程序的运行时间 (1)time指令(linux系统下) time go run a.go real:从程序开始到结束,实际上度过的时间 user:程序在用户态度过的时间 sys:程序在内核度过的时间 一般情况下,real>=user+sys (2) /usr/bin/time 指令(linu
阅读全文
摘要:1.极简单的部署方式 直接编译成机器码、不依赖其他库、直接运行即可部署。 2.静态类型语言 编译的时候检查出来隐藏的大多数问题 3.语言层面的并发 天生的基因支持、充分利用多核 4.强大的标准库 runtime系统调度机制、高效的GC垃圾回收、丰富的标准库 5.简单易学 25个关键字、C语言基因,内
阅读全文
摘要:1.包管理,大部分都在github上,私人账户维护,风险较大 2.无泛化类型,go 2.0计划加上 3.所有的exception都用Error来处理 4.对C的降级处理,并非无缝,没有C降级到asm那么完美(序列化问题)
阅读全文
摘要:1.云计算基础设施领域 代表项目:docker、kubernetes、etcd、consul、cloudflare cdn、七牛云存储等 2.基础后端软件 代表项目:tidb、influxdb,cockroachdb 3.微服务 代表项目: go-kit、micro、monzo bank的typho
阅读全文