自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 实现Redis协议解析器

【代码】实现Redis协议解析器。

2024-02-15 21:46:15 504 1

原创 Go语言其他高级特性

【代码】Go语言其他高级特性。

2024-02-14 00:54:40 510 1

原创 高并发下的内存模型与垃圾回收

协程栈记录了协程的执行现场。协程栈还负责记录局部变量,传递参数和返回值。Go使用参数拷贝传递。Go模仿TCmalloc,建立了自己的堆内存架构。使用heapArena向操作系统申请内存。使用heapArena时,以mspan为单位,防止碎片化。mcentral是mspan们的中心索引(存在锁竞争问题)。所以引入了mcache,mcache记录了分配给各个P的本地mspan。Go将对象按照大小分为3种。tiny对象和small对象使用mcache。

2024-02-13 20:39:56 1085 1

原创 高并发应用:TCP网络编程

Network Poller是runtime的强大工具抽象了多路复用器的操作Network Poller可以自动监测多个Socket状态在Socket状态可用时,快速返回成功。在Socket状态不可用时,休眠等待。net包抽象了TCP网络操作。使用net.Listen()得到TCPListener(LISTEN状态的Socket)使用TCPListener.Accept()得到TCPConn(ESTABLISHED)

2024-02-13 00:26:23 1068 1

原创 高并发下的通信方式:Channel管道

编译阶段,会把

2024-02-12 15:12:40 894 1

原创 Go高并发下的锁

原子操作是一种硬件层面加锁的机制。数据类型和操作类型有限制。sema锁是runtime的常用工具sema经常被用作休眠队列。mutex正常模式:自旋加锁+sema休眠等待。mutex正常模式下,可能有锁饥饿的问题。锁竞争严重时,互斥锁进入饥饿模式。饥饿模式没有自旋等待,有利于公平。Mutex用来写协程之间互斥等待。读协程使用readerSem等待写锁的释放。写协程使用writerSem等待读锁的释放。readerCount记录读协程的个数。

2024-02-11 11:28:20 942 1

原创 高并发的核心工具:协程

如果协程顺序执行,会有饥饿问题。协程执行中间,将协程挂起,执行其他协程。完成系统调用时挂起,也可以主动挂起。防止全局队列饥饿,本地队列随机抽取全局队列。基于系统调用和主动挂起,协程可能无法调度。基于协作的抢占式调度:业务主动调用morestack()基于信号的抢占式调度:强制线程调用doSigPreempt()

2024-02-09 18:49:07 1067 1

原创 Go高并发下的数据结构

Go语言使用拉链实现了HashMap。每一个桶中存储键哈希的前8位。桶超出8个数据,就会存储到溢出桶中。装载系数或者溢出桶的增加,会触发map扩容“扩容”可能并不是增加桶数,而是整理map扩容采用渐进式,桶被操作时才会重新分配。map在扩容时会有并发问题sync.Map使用了两个map,分离了扩容问题不会引发扩容的操作(查、改)使用read map可能引发扩容的操作(新增)使用dirty map。

2024-02-08 21:37:42 925

原创 重新认识Go语言

Go综合了多种语言的优势Go是一种天生支持高性能并发的语言Go在工业界有广泛的应用。Go的Runtime负责内存管理、垃圾回收、协程调度Go的Runtime被编译为用户程序的一部分,一起运行。

2024-02-07 18:58:15 911 1

原创 Golang-Runtime

一个白色对象被黑色对象所引用,同时灰色对象失去了这个白色对象的可达关系。

2024-01-29 12:33:22 1504

原创 Go语言高级特性

协程的上下文Go语言1.7版本中引入的标准库的接口传递跟踪、取消信号和超时消息。

2024-01-24 22:53:38 972 1

原创 Go语言基础知识二

【代码】Go语言基础知识二。

2024-01-22 17:32:44 510 2

原创 Go语言基础知识一

new可以为任何类型的值开辟内存并返回此值的指针。new申请的值均为零值,对创建映射和切片没有意义。实际工作中通常使用字面量来创建数组而很少使用new。字符串字面量rune字面量//a,b,c的ASCII码值的十进制分别是97,98,99,对应的8进制为141,142,143//对于字符串abc我们可以通过//a,b,c的ASCII码值的十进制分别是97,98,99,对应的16进制为61,62,63//unicode也是通过16进制的码值表示的字符串字面量不支持单引号转义。

2024-01-22 17:30:46 1138

原创 算法训练营打卡记录

今天的内容比较基础,但是卡哥关于而非查找时区间的选择:左闭右闭区间、左闭右开区间,以及根据不同的区间确定是= 那里让我很有醍醐灌顶的感觉。

2023-04-19 22:40:02 1685 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除