邓承超的个人日志
  • 随笔
  • 读过的书
  • 设计模式
  • 关于我

借鉴context的源码技巧

什么是context 在传统服务中,处理一个请求通常会连带着发起多个对其他服务的请求,这通常可能会导致一个请求传播到多个goroutine中。 如上图所示,对于这种场景,如果request由于某些异常原因导致提前返回了结果,此时则需要通知所 … 继续阅读 借鉴context的源码技巧

作者 dengchengchao@outlook.com发表于 2022年12月29日2022年12月29日

sync.Mutex 源码分析(三)

在前面的文章中,我们分析到Mutex在休眠g和唤醒g分别用到了runtime_SemacquireMutex和runtime_Semrelease,接下来简单分析这两个函数的源码。 SemacquireMutex其源码对应runtime#s … 继续阅读 sync.Mutex 源码分析(三)

作者 dengchengchao@outlook.com发表于 2022年11月5日2022年11月5日

sync.Mutex 源码分析(二)

接下来我们分析Mutex的源码: Mutex采用了一个int32类型的字段:state来描述当前锁的状态,包括: 当前mutex是否被持有 是否当前已经唤醒了一个goroutine 是否处于饥饿状态 当前等待唤醒的goroutine数量 其 … 继续阅读 sync.Mutex 源码分析(二)

作者 dengchengchao@outlook.com发表于 2022年11月5日2022年11月5日

sync.Mutex 源码分析(一)

今天我们看下mutex。 在golang中,互斥锁由sync.Mutex实现,其仅包含两个方法,使用如下: mutext.Lock() //临界区 mutext.UnLock() 虽然仅仅两个方法,但是如果不了解Mutex的特性,则很容易在 … 继续阅读 sync.Mutex 源码分析(一)

作者 dengchengchao@outlook.com发表于 2022年11月5日2022年11月5日

golang netpoll 源码分析

在之前讲解goroutine的时候,我们说过,想要实现goroutine,必须解决的一个问题便是系统IO,系统调用不能长时间阻塞M,否则随着M的阻塞与新的M创建,协程会退化为线程导致系统负载过高。 golang选择的解决方案是重构网络库代码 … 继续阅读 golang netpoll 源码分析

作者 dengchengchao@outlook.com发表于 2022年11月5日2022年11月5日

GMP模型(六)M的状态流转

继续看m,在golang中没有对m的状态的枚举,但是我们依然可以根据其代码运行过程,将其分为以下几种状态: 这里我们模仿之前G和P的状态枚举,列举出M的状态枚举 新建状态(_Mnew):此时m完成OS Thread创建,完成g0的初始化,等 … 继续阅读 GMP模型(六)M的状态流转

作者 dengchengchao@outlook.com发表于 2022年10月5日2022年10月5日

GMP模型(五)P的状态流转

继续看P,对于p来说,p的生命周期比较简单,在进程刚初始化时,便会首先初始化所有的p: P的初始化 在系统入口函数runtime·rt0_go(SB)中,会调用schedinit()函数初始化全局变量sched时,会调用procresize … 继续阅读 GMP模型(五)P的状态流转

作者 dengchengchao@outlook.com发表于 2022年10月5日2022年10月12日

GMP模型(四)G的主动挂起状态

继续看g,在上一章中我们了解了golang如何解决g中代码存在系统调用的问题,接下来继续看另外一种情况,当g中存在锁或者类似需要waiting状态的时候,需要怎么处理? 其实简单想一想也能明白,无非是将g暂时挂起,让p继续调度其他g,等g执 … 继续阅读 GMP模型(四)G的主动挂起状态

作者 dengchengchao@outlook.com发表于 2022年10月5日2022年10月5日

GMP模型(三)G与系统调用

在上一章内容中,我们了解的G的生命周期,接下来我们继续第一章中简版GMP模型中留下的问题; G的中断 当我们执行系统调用时,如果不进行特殊处理,则会阻塞M,进而使得整个系统被拖慢,在golang中,通过系统调用源码可以找到,所有的系统调用最 … 继续阅读 GMP模型(三)G与系统调用

作者 dengchengchao@outlook.com发表于 2022年10月5日2022年10月5日

GMP模型(二)G的创建与执行

GMP中的G是对任务的抽象,其通过g结构体表示,其定义在runtime.runtime2.go中。 G 的创建 当程序中使用go关键字创建一个goroutine时,编译器会将其编译为newproc()函数,用来创建一个新的goroutine … 继续阅读 GMP模型(二)G的创建与执行

作者 dengchengchao@outlook.com发表于 2022年10月5日2022年10月5日

文章导航

Page 1 Page 2 … Page 11 下一页

发布者

头像

dengchengchao

不积跬步 无以至千里

分类目录

  • Docker
  • Go
  • JVM
  • Kafka
  • MongoDB
  • MyBatis
  • MySQL
  • Redis
  • Tomcat
  • 技术日志
  • 日记
  • 杂记
  • 算法
  • 设计模式
  • 随便写写
  • 首页

标签

ClassLoader Digester Docker Dockerfile File Files GMP Go HashMap IDEA Java Java8 JavaAgent Java 基础 Java工具 Java 干货 Java 语法 JMH JVM kafka log MongoDB MyBatis Path redis Spring String switch Tomcat UTF8 编码 创建型模式 双亲委派机制 工厂方法 建造者模式 技术干货 技术日志 抽象工厂 源代码 简单工厂 类加载 结构型模式 行为型模式 设计模式 责任链模式 面向对象设计原则

文章归档

  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年7月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年6月
  • 2020年2月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
           
© 2017 - 2023 邓承超的个人日志 版权所有 京ICP备18030052号-1