目录互斥锁的定义go Mutex 的基本用法互斥锁使用的两个例子gin Context 中的 Set 方法sync.Pool 中的 pinSlow 方法互斥锁使用的注意事项互斥锁锁定的是什么互斥锁实现原理信号量等待队列原子操作Mutex 的公平性Mutex 源码剖析LockUnlock总结在我们的日常开发中,总会有时候需要对一些变量做并发读写,比如 web ......
202
0
0
2023-09-11
目录1. 简介(Introduction)2. 建议(Advice)3. 发生在…之前(Happens Before)3.1 重排序3.2 happens-before3.3 规则4. 同步(Synchronization)4.1 初始化(Initialization)4.2 Go协程的创建(Goroutine creation)4.3 Go协程的销毁(Go ......
189
0
0
2023-09-11
目录扫描的目的扫描的实现运行期内存分配运行扫描阶段总结之前阐述了 golang 垃圾回收通过保证三色不变式来保证回收的正确性,通过写屏障来实现业务赋值器和 gc 回收器正确的并发的逻辑。其中高概率的提到了“扫描队列”和“扫描对象”。队列这个逻辑非常容易理解,那么”扫描对象“ 这个你理解了吗?有直观的感受吗?这篇文章就是要把这个扫描的过程深入剖析下。扫描的东西 ......
167
0
0
2023-09-11
目录GO的并发编程分享啥是并发编程呢为啥要有并发编程并发和并行的区别协程 goroutine 是啥GO 高并发的原因是啥GOLANG并发编程涉及哪些知识点呢Goroutine的那些事如何使用 goroutine启动单个协程多个协程GO 中的协程goroutine 是如何调度总结GO的并发编程分享之前我们分享了网络编程,今天我们来看看GO的并发编程分享,我们先 ......
240
0
0
2023-04-02
之前做项目基本上公司是用 gRPC 和 echo 这两个框架的组合,后来 Gin 框架在Go圈越来越流行,陆续我在公司接触到的项目也开始有人用 Gin 框架开发了。因为我也是偶尔开发,像Gin框架里边参数的模型验证和绑定这些没有系统去学习,都是粘贴一下其他人的代码,改成我要的参数和模型,这里说的模型就是保存请求数据的 Struct。慢慢我发现每个人写的风格都 ......
398
0
0
2023-03-19
1. 关闭只读的channel会编译错误,而关闭只写的channel则不会。channel2. 读写nil channel会发生阻塞,而关闭则会panicvar nilStream chan interface{} close(nilStream) // 结果: panic: close of nil channel [recovered] ......
395
0
0
2023-02-08
Processes and Threads进程操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运行的容器。这些资源包括内存地址空间、文件句柄(文件描述符)、设备和线程。不同的应用程序使用的内存空间不同,在操作系统里,就是用进程来做的资源管理、隔离。线程线程是操作系统调度的一种执行路径,用于在处理器执行我们在函数中编写的代码。一个进程 ......
335
0
0
2023-01-04
Mutexes do no scale. Atomic loads do.atomicatomic 包中提供许多基本数据类型的原子操作,主要可以分为下面几类:原子交换CAS原子加法原子取值原子赋值Value原子交换这一类方法的作用是将 new 存储到地址 addr 并返回该地址上原来的值。func SwapInt32(addr *int32, new int ......
337
0
0
2022-11-27
不要通过共享来通信,而要通过通信来共享。Go 并发goroutinego 程(goroutine)是 go 并发的核心,它比线程要更小, 由 go Runtime 管理,运行 goroutine 只需要很少的栈空间,因此可以实现很大的并发量,在 go 中,开启一个 goroutine 只需要使用 go 关键字即可:package main import ......
350
0
0
2022-11-27
需求整理管理后台有超管权限,超管拥有所有权限普通管理员可以设置角色,角色单选角色可以赋予多个权限,权限多选这样我们就实现了对普通管理员的角色和权限的灵活管理文档说明基于golang语言开发基于gin网络框架开发基于MySQL5.8开发把权限管理部分封装成中间件,在rourter文件中引用非核心代码已省略,用3个竖着排列的点号.表示数据库表结构设计管理员表权限 ......
276
0
0
2022-11-25
0.1、索引waterflow.link/articles/1664591292...1、tcp的3次握手(建立连接)客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当前发送序列号 j,客户端进入 SYNC_SENT 状态;服务器端的协议栈收到这个包之后,和客户端进行 ACK 应答,应答的值为 j+1,表示对 SYN 包 j 的确认,同时服务器也发 ......
354
0
0
2022-11-16
因为项目需求,需要用到连接池,在看了很多代码之后发现不能满足需求,所以自己撸一个,现在开源出来,看能否帮到跟我有同意需求的同学仓库地址: github.com/bean-du/pool欢迎大家 Star 和 Issuse支持:DialerFunc 通过此func 定义需要管理的连接类型ReadFunc 根据连接类型自定义数据读取函数WriteFunc 根据连 ......
289
0
0
2022-11-11
闲聊这个打水印的 demo 其实已经完成许久,一直没有总结总结,有空填了一下自己的坑吧,也让自己复习复习。背景公司是做图形设计资源站点,详情、搜索页面都需要提供预览图片,图片都是包含公司的水印的图片,水印图片单独存储。现在公司需要更换水印图,所以要获取全部的原图,打上新水印,再替换现有的图片。方案公司主要是 PHP 开发, 本来是打算用 Laravel 的 ......
375
0
0
2022-11-11
不同 goroutine 之间如何通讯?有两种方案:1.全局变量的互斥锁2.使用管道 channel 来解决因为没有对全局变量 m 加锁,因此会出现资源争夺问题,代码会出现错误,提示 concurrent map writesvar ( myMap = make(map[int]int, 10) lock sync.Mutex ) ......
277
0
0
2022-11-09
func main() { var name string = "抢手" nameType := reflect.TypeOf(name) nameValue := reflect.ValueOf(name) fmt.Println("name type:", nameType) fmt.Println ......
359
0
0
2022-11-08