[concurrent-map]-并发map在go中的使用

作者:三十三重天 首发 | 我的博客 通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。 引言 Go语言原生的map类型并不支持并发读写。 在Go 1.9之前,go语言标准库中并没有实现并发map。在Go 1.9中,引入了sync.Map。 concurrent-map的优势 concurrent-map提供了一种高性能的解决方案:通过对内部map进行分片,降低锁粒度,从而达到最少的锁等待时间(锁冲突)。 sync.Map与此con...阅读全文

简书 2021-03-28 16:32:45 HapplyFox

Go封装、继承、多态

封装封装主要是通过访问权限控制实现的。在Java中,共有public 、protected、default、private这四种权限控制。而相应的在golang中,是通过约定来实现权限控制的。变量名首字母大写,相当于java中的public,首字母小写,相当于private。同一个包中访问,相当于default。由于go没有继承,也就没有protected。继承虽然golang的语法没有继承,但是可以通过相应的结构体之间的组合来实现类似的继承效果。例子如下:package mainimport ...阅读全文

简书 2021-03-28 16:32:45 陈光环_18

Go singleflight

缓存穿透、缓存击穿、缓存雪崩解决方案 缓存处理 缓存处理流程 缓存击穿 单飞 缓存击穿是指缓存中没有但数据库存在的对应key的值,由于缓存中key的过期时间到期,转而去数据库读取。当并发请求多大时会引发数据库压力,瞬间倍增造成崩溃。 缓存击穿是由于对于设置过期时间的key在某时刻被超高并发地访问形成“热点”,请求全部转发到数据库造成数据库压垮。 并发访问 使用Golang的map和WaitGroup特性实现并发控制 例如:并发获取数据,先尝试从缓存获取数据,若缓存不存在则从数据库获取数据。 $ ...阅读全文

简书 2021-03-28 16:32:45 JunChow520

一个小技巧加快 golang docker 镜像构建速度,避免频繁下载 go mod

Dockerfile先 COPY go.mod 执行 go mod download,再 COPY 源码执行 build。利用 docker image 分层构建的特性,每行命令为一层。如果底层不变,则可使用 cache,无需重复构建。源码比 go.mod 修改更频繁。FROM golang:1.15-alpine AS builder WORKDIR /workspace ENV GO111MODULE=on \ GOPROXY=https://goproxy.cn,direct # cach...阅读全文

Segmentfault 2021-03-29 09:32:35 无风

Golang 并发编程实践

人是一种高并发的物种,细品。初识对 Go 语言的第一印象就是其原生地支持并发编程,而且使用的是协程,比线程更加轻量。关于进程、线程和协程的区别进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。进程切换只发生在内核态。线程:线程是进程的一个执行流,独立执行它自己的程序代码,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程。协程:协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。在语言级别可以创建...阅读全文

Segmentfault 2021-03-29 09:32:35 K8sCat

手撸golang etcd raft协议之1

手撸golang etcd raft协议之1缘起最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1)本系列笔记拟采用golang练习之gitee: https://gitee.com/ioly/learning.gooopraft分布式一致性算法分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了领袖选举(leader election)、 日志复制(log...阅读全文

Segmentfault 2021-03-29 09:32:35 ioly

在vscode中go编码发生的问题整理

关于我 文章首发 | 我的博客 | 欢迎关注 引言 使用VsCode进行Go程序开发,我们肯定会碰到一些问题,这些问题有些是IDE的配置问题,有些是下载包的版本不一致问题,本文主要针对在开发过程中碰到的问题做一个简单的回顾和整理。 前期准备,必看 在进行问题纠错前,先确保自己正确下载了golang的官方工具集go-tool,如果不确定,就跟着我的步骤操作一遍,可能操作后,你的问题就解决了。 1、配置golang的源。 go env -w GOPROXY=https://goproxy.cn,di...阅读全文

51CTO博客 2021-03-28 09:52:45 qq5c5012ac9b084

2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。

2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。 福大大 答案2020-03-27: 1.找尾节点并且计算链表节点个数。 2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返回头节点。 3.求倒数k+1的节点。 4.缓存倒数第k节点ans。 5.尾节点连头节点。 6.倒数k+1节点的Next指针为空。 7.返回ans。 代码...阅读全文

简书 2021-03-28 00:32:36 福大大架构师每日一题

手撸golang etcd raft协议之1

手撸golang etcd raft协议之1 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 gitee: https://gitee.com/ioly/learning.gooop raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了领袖选举(leader election)、 日志...阅读全文

简书 2021-03-28 00:32:36 老罗话编程

Go语言RPC学习记录

Go语言RPC学习记录 RPC概念 RPC(Remote Procedure Call Protocol),是远程过程调用的缩写,通俗的说就是调用远处的一个函数。与之相对应的是本地函数调用,我们先来看一下本地函数调用。当我们写下如下代码的时候:规则 result := Add(1,2) 我们知道,我们传入了1,2两个参数,调用了本地代码中的一个Add函数,得到result这个返回值。这时参数,返回值,代码段都在一个进程空间内,这是本地函数调用。 那有没有办法,我们能够调用一个跨进程(所以叫"远程...阅读全文

51CTO博客 2021-03-27 23:09:20 ShixuanLiu

基于Golang的云原生日志采集服务设计与实践

一、背景云原生技术大潮已经来临,技术变革迫在眉睫。在这股技术潮流之中,网易推出了轻舟微服务云平台,集成了微服务、Servicemesh、容器云、DevOps等,已经广泛应用于公司集团内部,同时也支撑了很多外部客户的云原生化改造和迁移。在这其中,日志是平时很容易被人忽视的一部分,却是微服务、DevOps的重要一环。没有日志,服务问题排查无从谈起,同时日志的统一采集也是很多业务数据分析、处理、审计的基础。但是在云原生容器化环境下,日志的采集又变得有点不同。二、容器日志采集的痛点传统主机模式对于传统的...阅读全文

51CTO博客 2021-03-27 10:32:26 mb5fdb099dd338a

17.漏洞扫描程序Vuls部署及应用(1)

Vuls简介 Vuls 是一款适用于 Linux/FreeBSD 的漏洞扫描程序,无代理,采用 Go 语言编写。对于系统管理员来说,每天必须执行安全漏洞分析和软件更新都是一个负担。为避免生产环境宕机,系统管理员通常选择不使用软件包管理器提供的自动更新选项,而是手动执行更新。这会导致以下问题:1.系统管理员必须不断注意NVD(National Vulnerability Database)或类似数据库中的新漏洞。2.如果服务器中安装了大量软件,系统管理员可能无法监视所有软件。3.执行分析以确定受新...阅读全文

简书 2021-03-27 22:32:47 負笈在线

go三色回收

[toc] 垃圾回收的知识很早之前就了解了,现在回过头在看,发现有了新的问题,新的理解 存在的问题 为什么必须三色,二色的话会有什么问题 插入写屏障为什么不行 为什么必须使用混合写屏障,删除写屏障为什么不行。 为什么必须三色 三色具体是指: 黑色。已经扫描结束的对象 灰色。待扫描的对象 白色。未扫描的对象 具体实现中,我们遍历灰色对象,标记为黑色。并把指向的新对象标记为灰色。 但是如果是二色的话,那么就只有黑色和白色。 那么遍历的操作是不能暂停的。因为如果恢复的话,面对黑色对象我们不知道这个是已...阅读全文

简书 2021-03-27 22:32:46 lucasgao

Go ORM 干啥的?

​胖sir :接着,给你一个馅饼儿兵长 : 来嘞!!一篇来自ORM的整理笔记...1 什么是ORM?为什么要⽤ORM?什么是ORM ,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,这样,我们在具体的 操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象⼀样操作它就可以了 。 ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建⽴在概念模型的基础上的。域模型是⾯向对 象的关系模型是⾯向关系的⼀般情况下,⼀个持久化类...阅读全文

Segmentfault 2021-03-29 09:32:35 小魔童哪吒

golang中的defer关键字

defer关键字将函数调用计划到外层函数返回时执行,典型的用法就是互斥锁释放,文件关闭。这样的函数是不会因为随着返回分支的数量变多而忘记关闭。 但是defer的执行特定如果没有了解的话,很容易掉坑里。 多个defer的执行顺序 首先,对于下述例子,输出为何 for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 首先说明,函数存在多个defer语句,调用的时的顺序为FILO,可以想想成压栈处理,即吧defer的调用先存入栈中,然后调用时在一个个...阅读全文

Linux学习笔记-基础篇-01-应用领域

Linux使用在哪些地方? 对于开发而言 , 像我们的JavaEE , 大数据 , Python , PHP , C/C++ , Golang等等 , 项目最好是可以部署在Linux系统中来运行的 ;对于Linux运维工程师 , 主要是服务器的规划 , 调试优化 , 日常的监控 , 对系统异常进行监控 , 比如磁盘空间使用率太高了 , CPU占用率太高了是不是什么异常的进程引起的 , 当然 , 监控就是为了了解服务器的运行状态 , 当有故障时 , 肯定是要进行故障的处理 , 还有数据的备份与恢复...阅读全文

简书 2021-03-27 16:32:47 黄刚刚

单核CPU下Golang调度及抢占式调度的实现

有群友说面试的时候被问到:单核CPU,开两个goroutine,其中一个死循环,会怎么样?相信很多小伙伴乍一看一脸懵,我就在群里回了一下go1.14版本实现了基于信号的抢占式调度,可以在goroutine执行时间过长的时候强制让出调度,执行其他的goroutine。接下来看看具体怎么实现的,话不多说直接上代码。基于go1.15 linux amd64。 先看一个常规的栗子 func f1() { fmt.Println("This is f1") } func f2() { fmt.Printl...阅读全文

简书 2021-03-27 16:32:39 朴素的心态