合集-Go底层基础学习

摘要:0.前言 该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习。 该笔记很大程度的参考了网名为“小徐先生”的前辈所分享的博客,推荐大家可以先看一看它的博客来一起学习,我的只是照葫芦画瓢还有一些代码更新的讲解而已。 当前笔者追溯的是go版本 阅读全文
posted @ 2024-10-22 17:23 MelonTe 阅读(614) 评论(0) 推荐(0)
摘要:0、引言 我们知道,这当代操作系统中,多线程和多进程模型被广泛的使用以提高系统的并发效率。随着互联网不断的发展,面对如今的高并发场景,为每个任务都创建一个线程是不现实的,使用线程则需要系统不断的在用户态和内核态之间不断的切换,引起不必要的损耗,于是引入了协程。协程存在于用户空间,是一种轻量级的并发执 阅读全文
posted @ 2024-11-17 15:35 MelonTe 阅读(1424) 评论(0) 推荐(0)
摘要:0、引言 在学习完了Socket编程的基础知识、Linux系统提供的I/O多路复用的实现以及Golang的GMP调度模型之后,我们进而学习Golang的网络模型——netpoll。本文将从为什么需要使用netpoll模型,以及netpoll的具体流程实现两个主要角度来展开学习。当前使用的Go的版本为 阅读全文
posted @ 2024-11-27 01:18 MelonTe 阅读(907) 评论(2) 推荐(0)
摘要:0、引言 本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.4 1、Golang内存管理宏观结构 假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性能瓶颈。尤 阅读全文
posted @ 2024-12-19 22:13 MelonTe 阅读(532) 评论(0) 推荐(0)
摘要:1、什么是内联函数?什么是逃逸现象? 什么是内联函数? 内联函数是一种在编译时,直接将要调用的代码嵌入到调用处的优化技术,其主要目的是减少函数调用时的开销,例如对于普通函数其执行过程如下: 将参数压入栈中 根据地址跳转至对应位置执行 执行完毕后返回调用点 而使用内联函数则将函数的代码嵌入到调用点,从 阅读全文
posted @ 2024-12-22 20:58 MelonTe 阅读(223) 评论(0) 推荐(0)
摘要:1、核心数据结构 1.1、hchan type hchan struct { qcount uint // total data in the queue dataqsiz uint // size of the circular queue buf unsafe.Pointer // points 阅读全文
posted @ 2025-02-07 20:12 MelonTe 阅读(201) 评论(0) 推荐(0)
摘要:0、引言 相信大家对Map这个数据结构都不陌生,像C++的map、Java的HashMap。各个语言的底层实现各有不同,在本篇博客中,我将分享个人对Go的map实现的理解,以及深入源码进行分析,相信耐心看完一定会收获不少。 1、宏观结构 相信大家对于map的基本使用都不陌生,Golang中的map是 阅读全文
posted @ 2025-03-05 21:20 MelonTe 阅读(1068) 评论(4) 推荐(0)
摘要:1、锁的概念引入 首先,为什么需要锁? 在并发编程中,多个线程或进程可能同时访问和修改同一个共享资源(例如变量、数据结构、文件)等,若不引入合适的同步机制,会引发以下问题: 数据竞争:多个线程同时修改一个资源,最终的结果跟线程的执行顺序有关,结果是不可预测的。 数据不一致:一个线程在修改资源,而另一 阅读全文
posted @ 2025-03-18 21:53 MelonTe 阅读(406) 评论(0) 推荐(0)
摘要:1、支持Put、Get的LRU实现 想要实现一个带过期时间的LRU,从易到难,我们需要先学会如何实现一个普通的LRU,做到O(1)的Get、Put。 想要做到O(1)的Get,我们很容易想到使用哈希表来存储每个key对应的value;要想实现O(1)的Put,并且能当容量满了的时候自动弹出最久未使用 阅读全文
posted @ 2025-04-22 20:02 MelonTe 阅读(539) 评论(0) 推荐(1)