自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GMP模型

当M上的G运行耗时活着阻塞的时候,M与释放P转给其他M执行,当M执行完的系统调用阻塞的G后,M会尝试获取新的空闲P,同时将G放入P的本地队列执行。新创建的G会首先存在P(本地队列里面),如果P满了,会存到全局队列中,同时把P中的一半的G也放在全局队列里面,之后有新的G还会先存到P里面。P,Processor,处理器,主要用于协调G和M之间的关系,存储需要执行的G队列,与特定的M绑定后,执行Go程序,也就是G。P与M建立联系,在P中执行G(P并不与一个固定的M简历联系如果M阻塞,P会与新的M联系)

2024-04-12 14:17:04 249

原创 Channel的实现原理

它允许 Goroutine 在等待 channel 上的发送或接收操作时,以一种高效的方式挂起和恢复,同时支持与 select 语句的集成。3. 判断申请内存空间大小是否越界,mem 大小为 element 类型大小与 element 个数相乘后得到,仅当无缓冲型 channel 时,因个数为 0 导致大小为 0;6. 如若有缓冲的 struct 型,则一次性分配好 96 + mem 大小的空间,并且调整 chan 的 buf 指向 mem 的起始位置;:用于竞争获取锁时的票据,类似于一个简单的等待队列。

2024-04-07 14:24:05 900 1

原创 Channel有缓冲和无缓冲区别(fatal error: all goroutines are asleep - deadlock!问题)

因为是无缓冲通道,他需要有协程去接收它,而在上面的代码中,先执行了发送的代码,接收的代码还没有执行导,也就是没有接收消息的协程,所以会卡死。概念这里我们不多赘述,直接看实际开发中它的区别。可以看出运行是没有问题的。首先我们看无缓冲通道。

2024-03-25 17:20:21 141

原创 为什么channel是线程安全的

想要在了解channel为什么是线程安全的之前要了解一个概念:通过共享内存来通信, 通过通信来共享内存。

2024-03-22 11:29:47 596 1

空空如也

空空如也

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

TA关注的人

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