- 博客(12)
- 收藏
- 关注
原创 golang冒泡、选择、插入、快速、堆、奇偶、归并、希尔 排序思路和代码
冒泡排序算法func BubbleSort(arr []int) { // 最外层的循环表示循环几轮 for i := 0; i < len(arr); i++ { // 内侧是循环几次,注意比较的时候索引越界 // 所以我们在比较的时候只需要走到数组长度的前一个 // 因为内侧比较的时候已经加1 // 所以倒数第二个也会倒数第一个数据作比较 for j := 0; j < len(arr)-1; j++ { // 如果数组内的数据不满足条件就交换 if.
2021-12-25 15:50:41 252
原创 高效epoll详解
select 和 poll 监听文件描述符list,进行一个线性的查找 O(n)epoll: 使用了内核文件级别的回调机制O(1)cat /proc/sys/fs/epoll/max_user_watches表示用户能注册到epoll实例中的最大文件描述符的数量限制。epoll_create: 创建一个epoll实例,文件描述符epoll_ctl: 将监听的文件描述符添加到epoll实例中,实例代码为将标准输入文件描述符添加到epoll中epoll_wait: 等待epoll事件从epoll实
2021-12-21 14:28:56 174
原创 水平触发和边缘触发
水平触发(level-triggered)socket接收缓冲区不为空 有数据可读 读事件一直触发socket发送缓冲区不满 可以继续写入数据 写事件一直触发边沿触发(edge-triggered)socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件socket的发送缓冲区状态变化时触发写事件,即满的缓冲区刚空出空间时触发读事件我理解的就是:水平触发:不断查询是否有可用的文件描述符,有的话,内核触发事件,如果数据没有处理完,内核接着触发事件(有.
2021-12-21 14:19:23 313
原创 从零单排之golang:GPM并发模型学习
单体服务如何提高它的并发量:从串行(一个人做完一件事再去做另一件事)到并发(时间片轮询:每个任务执行一段时间,好比渣男,每个女朋友都想照顾到),从并发到并行(好比电影里的多个脑袋的怪物,同一时间就可以完成吃饭、睡觉、打豆豆,三件事)IO多路复用模型(这部分有兴趣的同学可以看一下linux相关的编程):select:跨平台、实现简单,但是连接数上限低,维护一个大的数组内核拷贝问题不好解决poll:select模型的增强版,突破了1024连接数的限制epoll:事件驱动模型,创建连接后是挂.
2021-12-21 11:42:29 263
原创 从零单排之golang:mutex使用及源码详解
mutex(互斥锁)详解:互斥锁是一个值类型,实现了locker接口,所以使用的时候需要注意参数的传递,它的底层嵌套了linux的信号量(Semaphore),每次操作其实就是PV操作type Mutex struct { state int32 sema uint32}信号量解释通过操作信号量 S 来处理进程间的同步与互斥的问题。S>0:表示有 S 个资源可用;S=0 表示无资源可用;S<0 绝对值表示等待队列或链表中的进程个数。信号量 S 的初.
2021-12-21 02:30:43 205
原创 从零单排之golang:channel使用及源码详解
channel 的特性:不要通过共享内存来通信,而要通过通信来实现内存共享1. channel是一个先进先出的队列,go语言提倡使用管道来来通信2. channel在协程间通信是安全的,因为chan的底层数据结构维护一个互斥锁,在读取或者写入资源前会先获取锁3. channel分为有缓存和无缓存的管道:有缓存的管道数据写满后阻塞管道,直到有其他的协程读取管道内的数据,无缓存的管道必须有其他的协程先读取,因为无缓存的管道写入一个数据就把程序永远的阻塞住了,这时候就会产生一个死锁,无论有缓冲还是无缓冲.
2021-12-21 02:11:37 221
原创 kind多节点端口映射
前面的笔记中介绍过说多节点的kind集群yaml:kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane- role: worker- role: worker 这样的多节点生成后发现生成的pod竟然无法访问,查阅文档发现kind集群的端口需要和node的端口映射,官方建议是listenAddress写为0.0.0.0,并不是127.0.0.1主机端口应该是0-65535 而cont
2021-11-22 18:10:16 2978
原创 vscode 跳转golang函数定义无效
设置,查找go.docsTool,选项列表选择gogetdoc,然后保存,没有的就可以去网上安装这个工具,go get -u -v github.com/zmb3/gogetdoc
2021-11-17 19:34:57 408
原创 kind 安装及使用
Tips:以下的命令安装好自己多试几次就熟悉了 kind 安装curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.9.0/kind-linux-amd64chmod +x ./kindmv ./kind /${some-dir-in-your-PATH}/kindkubectl 安装curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.t
2021-11-17 17:30:20 3400
原创 go-micro安装及问题解决
Tips:micro安装需要go版本至少高于1.11目录Tips:micro安装需要go版本至少高于1.11consul 安装protoc 安装micro 安装protoc-gen-micro安装protoc-gen-go安装grpc安装consul 安装下载地址:Consul Versions | HashiCorp Releaseshttps://releases.hashicorp.com/consul/Tips:注意使用稳定版,因为有些新特性开发环境上..
2021-11-16 14:18:01 1398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人