自定义博客皮肤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)
  • 收藏
  • 关注

原创 进程 线程 协程 简述

概述进程:有自己独立的内存地址,有自己的堆。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程:有时被称为轻量级进程(Lightweight Process,LWP),是***操作系统调度(CPU调度)执行的最小单位***。协程:是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。协程是函数级的。优缺点分析:进程:稳定!由于有自己独立的内存空间,不存在线程那种共享内存的情况,更加的稳定。线程:切换开

2021-08-09 15:54:02 224

原创 golang 内联简述

什么是内联:栈分配内存会比堆分配高效地多,那么,我们就会希望对象能尽可能被分配在栈上。在Go中,一个goroutine会有一个单独的栈,栈又会包含多个栈帧,栈帧是函数调用时在栈上为函数所分配的区域。但其实,函数调用是存在一些固定开销的,例如维护帧指针寄存器BP、栈溢出检测等。因此,对于一些代码行比较少的函数,编译器倾向于将它们在编译期展开从而消除函数调用,这种行为就是内联。内联能提升性能,是否所有函数都内联比较好?内联就等于将函数的实现逻辑,写在调用的地方(原地展开)。若函数在多处被调用,内联必然会增

2021-08-01 16:39:54 1192

原创 golang central从heap获取span详解

简介当向central申请内存,而central中span队列又已满时,就会向heap申请内存结构体先大概看看heap的结构type mheap struct { // 以下为sweep相关的变量 lock mutex pages pageAlloc // page allocation data structure sweepgen uint32 // sweep generation, see comment in mspan; written during S

2021-08-01 16:02:24 226

原创 golang mcentral spanSet获取分配span内存

背景新版golang中mcentral中存储的已经不是span的列表,而是partial/full两个类中,[2]spanSet。如下所示:type mcentral struct { spanclass spanClass partial [2]spanSet // list of spans with a free object full [2]spanSet // list of spans with no free objects}本文将解析spanSet如何管理spans

2021-07-31 01:35:26 461

原创 golang 内存分配

基本策略每次从操作系统申请一个大块内存(比如1MB),以此减少系统调用将申请到的大块内存按照特定大小预先切分成小块,构成链表为对象分配内存时,只需从大小合适的链表提取一个小块即可回收对象内存时,将该小块内存重新归还到原链表,以便复用如果闲置内存过多,则尝试归还部分内存给操作系统,降低整体开销tips:内存分配只管理内存块,并不关心对象状态。且它不会主动回收内存,垃圾回收器在完成清理操作后,触发内存分配器的回收操作。内存块管理的内存块分为两种span:由多个地址连续的页(page)组成

2021-07-30 01:17:53 737

原创 浅谈go语言 程序init初始化

概述:本文主要讨论一个由go编译出来的程序,在进入main.main函数之前进行的一系列初始化。以及我们如何利用init做好自己需要的工作简述结论:初始化顺序:rutime1.goargs():整理命令行参数func args(c int32, v **byte) { argc = c argv = v sysargs(c, v)}os_linux.goosinit:确定cpu数量func osinit() { ncpu = getproccount() physHu

2021-07-28 01:13:38 430

原创 高性能MySQL part4 提高查询性能

案例一:为什么Range执行效率差?根据查询条件计算所有的possbile key计算全表扫描代价 (cost_all)计算最小的索引范围访问代价–核心步骤,直接决定了Range查询效率对每个possible keys(可选索引),调用record_in_ranges函数计算范围中的rows根据rows,计算二级索引访问代价获取cost最小的二级索引访问代价(cost_range)选择最小优化访问代价:cost_all与cost_range二选一原因分析:查询性能仅次于全表

2021-07-25 23:30:35 126

原创 高性能mysql_part3索引

一、索引基础知识什么是索引数据库索引是一种数据结构,它以额外的写入和存储空间为代价来提高数据库表上数据检索操作的速度。牺牲插入 更新等的效率常用数据结构二分查找法/折半查找B+树hash索引基础知识数据库中大多数索引都是通过B+树实现的MySQL中除了B+树索引外还需要关注Hash索引哈希索引InnoDB Adaptive Hash Index在内存中为频繁使用的索引创建hash索引,加速查找B+ Tree在MySQL数据库中没指定类型,默认是指使用B+ Tree

2021-07-24 20:27:14 67

原创 高性能Mysql_part2 事务、表设计

事务与锁事务的四个特性:原子性:事务所有的操作,要么全部完成,要么全不完成,不会结束在某个中间环节隔离性:当多个事务并发访问数据库中的同一个数据时,所表现出来的相互关系持久性:事务完成之后,事务所做的修改持久化保存,不会丢失一致性:事务开始之前和事务结束之后数据库的完整性限制未被破坏设计高性能的表结构范式设计数据库结构过程中所要遵循的规则和指导方法,有1/2/3/BC/4/5 NF六种范式优点:避免数据冗余,减少数据库空间,数据变更速度快缺点:范式等级越高,表的数量越多,获取数据

2021-07-24 17:50:03 90

原创 高性能mysql_part1 体系结构

Mysql体系结构connection Pool:用户鉴权、 连接处理、安全管理service&utilties:管理服务&工作集:备份恢复、安全管理、集群管理服务&工具sql interface:接受用户的SQL命令并处理Parser:sql解析器,解析查询语句,生成语法树,解析器会查询缓存Optimizer:查询优化器,对查询语句进行优化,选择合适索引Cache:全局缓存和session缓存Pluggable Storage Engines:存储引擎层,一种文件访

2021-07-24 15:36:41 79

原创 Redis发布、订阅消息

redis消息通过channel传输。例如在A通道发送消息,所有订阅了A通道的对象都将收到消息。使用:publish(发布)subscribe(订阅)psubsribe(通配符订阅)

2021-07-23 01:06:20 69

转载 go语言的官方包sync.Pool的实现原理和适用场景

已经使用golang有一段时间,go的协程和gc垃圾回收特性的确会提高程序的开发效率。但是毕竟是一门新语言,如果对于它的机制不了解,用起来可能会蹦出各种潘多拉盒子。今天就讲讲我在项目中用到的sync包的Pool类的使用,以免大家混淆使用。众所周知,go是自动垃圾回收的(garbage collector),这大大减少了程序编程负担。但gc是一把双刃剑,带来了编程的方便但同时也增加了运行时开销,使用不当甚至会严重影响程序的性能。因此性能要求高的场景不能任意产生太多的垃圾(有gc但又不能完全依赖它挺恶心的),

2021-07-22 18:02:05 342

原创 http库如何为gin框架提供服务

一、背景众所周知,gin框架是基于http库进行的开发。理解http如何为gin提供服务,可为我们后续编写高扩展性代码提供思路。二、http提供的方法与接口2.1 ListenAndServe() 方法func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe()}2.2 H

2021-07-22 16:12:57 150

原创 gin源码笔记

1、笔记、结论:1.1 简介Gin 是一个用 Go (Golang) 编写的 Web 框架。它具有类似martini-like的 API,由于 httprouter,性能提高了 40 倍。如果您需要性能和良好的生产力,您会喜欢 Gin。1.2 tips:1、各个router以树状存储,并GET/POST/PUT等为各个根结点2、重要的结构体:2.1 gin.go2.1.1 Engineengine是框架的实例,它包含了锁、中间件和配置生成type Engine struct { R

2021-07-21 00:59:44 236

空空如也

空空如也

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

TA关注的人

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