自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 06 go启动生命周期M0和G0

M01、启动程序后的编号为0的主线程(当前启动一个进程时,进程中会包含一个线程,进程中的第一个线程的编号设置为M0)如果进程中不开任何线程,可以理解为一个进程就是一个线程。2、在全局变量runtime.M0中,不需要在heap(堆)上分配。(M0在整个进程中是唯一的,无需在堆上分配)3、负责执行初始化操作和启动第一个G(M0是负责启动第一个G的,go语言是跑在协程上)4、启动第一个G之后,M0就和其他的M一样了(负责给其他M进行抢占)G01、每次启动一个M,都会第一个创建的.

2021-05-13 17:09:47 2352

原创 04、GMP的调度器策略

一、复用线程:避免频繁的创建、销毁线程,而是对线程的复用。work stealing机制(偷取机制)和hand off机制(握手机制)M1和P已经绑定且此时G1的协程正在被执行,G2和G3正在被等待中……M2此时是空闲的且它的P不分配,显然M2是空闲的,没有被使用。我们要将M2也利用上,即M2要想执行一个协程的话,它本身P的本地队列中是没有协程的,他就要从M1(其他队列)中偷取一个协程过来,这既是work steaking机制。hand off是分离机制。...

2021-05-07 22:13:39 581

原创 03、GMP模型简介

一、GMP简介prosessor处理器是用来处理goroutine协程的,processor包含着每一个goroutine的资源。如果想要运行一个goroutine的话首先要获取processor.processor可能就包含着可运行的goroutine的一些队列。二、GMP的全局队列和本地队列一个P同一时刻只能执行一个G,一个当前程序最高的并行数量就是GOMAXPROCS的数量。目前所有绿色的G全部都是等待运行的,如果想要执行,那就要首先拿到P中。一个新创...

2021-05-01 22:15:49 1004

原创 Golang调度器的由来

2021-04-28 09:20:48 112

原创 Golang早期调度器

G表示一个其中一个goroutine协程,M表示一个内核线程。go语言实际上有一些线程,比如CPU目前是4核的,4个M0,我有个队列,里面存放n个协程,就是可以理解每次出现一个协程我都会放入这个队列中,协程和线程是一个M:N的对应关系。当M0想去调用一个go协程,就需要获取全局go协程队列,队列会有一个锁进行保护,获取锁以后会尝试执行其中一个goroutine,获取完goroutine之后,剩余的goroutine会在队列中向前挪动,挪动到队列的头部,以便下次的...

2021-04-28 09:18:59 94

原创 多进程操作系统存在的问题

多进程操作系统他有一个轮询调度器,跑进程A,跑完后切换到跑进程B,跑完后切换到跑进程C。进程A是否跑完了呢,就切换进程B,因为我们要宏观的,看上去一起执行的每个进程都要执行到,那么我要给进程A多长时间,进程B多长时间呢?所以调度器就做了一个时间片的切分,规定了时间宽度。一个进程执行的最大时间不能超过时间片,如果超过时间片我就强制切换进程。如果说进程A没有执行完的话,我已经强制切换进程,那么我可以等待其他进程执行完后,在轮询完一圈后再接着后来执行进程A、进程B、进程C。这就可以在宏观...

2021-04-20 17:27:31 331

原创 单进程操作系统存在的问题

CPU无法区分进程和线程的,同一时刻只能执行同一进程的效果,因为他是一个单进程的操作系统,它里面只有一个核,CPU只能同时处理一个指令。单机进程时代的两个问题?1.单一执行流程、计算机只能一个任务一个任务的处理。2.进程阻塞所带来的CPU浪费时间是不可避免的(如进程A阻塞了,然后CPU是单进程没有任何的切换能力,但是需要等待进程A结束后才能执行下个进程)...

2021-04-20 17:19:43 219

原创 为什么TCP会出现粘包/拆包?

为什么会出现粘包/拆包?1.应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。2.应用程序写入的数据小于套接字缓冲区大小,网卡将应用多次写入数据发送到网络,这将会发生粘包。3.进行MSS(最大报文长度)大小TCP分段,当报文长度-TCP头部长度>MSSd的时候将会发生拆包。4.接收方法不及时读取套接字缓冲区数据,也会发生粘包粘包只在TCP这一层发生的,我们本身是在TCP上层应用层里面,应用层是在socket交互的,也就是说跟一个buffer的缓冲区交互...

2021-04-14 21:24:42 469

原创 TCP为什么需要流量控制?

TCP为啥需要流量控制?1、由于通讯双方,网速不同。通讯方任一方发送过快都会导致对方消息处理不过来,所以就需要把数据放到缓冲区中。2、如果缓冲区满了,发送方还在疯狂发送,那接收方只能把数据包丢弃。因此我们需要控制发送速率。3、我们缓冲器剩余大小称之接收窗口,用变量win表示。如果win=0,则发送方停止发送。TCP流量控制的流向...

2021-03-17 22:07:48 1378

原创 TCP的四次挥手中的等待2MSL

为什么time_wait需要等待2MSL?MSL:一个最大的生命周期,30秒--1分钟1、保证TCP协议的全双工连接能够可靠关闭。如果主动关闭方和被动关闭方的最后的一个确认(ack)包不等待2MSL时间的话,没发关闭。如果说主动关闭方发送ack包给被动关闭方,被动关闭方没有收到请求,就会请求主动关闭方重传这个数据包,等待2MSL是说如果遇到这种数据包的丢失,还可以重传数据包。如果不等待2MSL的话,遇到数据包丢失,就不可以重传数据包。那么被动关闭方就会一直保持一个LAST_ACK状态..

2021-03-17 22:04:44 281

原创 TCP的三次握手和四次挥手

TCP为什么需要三次握手?三次握手的主要目的是保证连接是双工的。可靠更多的是通过重传机制。双工指的是:我的发送和接收都是可以同时执行的。并且连接的双方都可以互相发送和接收。三次握手的详解三次握手数据包的流向:首先客户端去向服务端发送同步(SYN)包去请求连接,服务端响应确认(ACK)包,表示你可以连接,客户端相应的收到确认(ACK)包去建立这个连接,至此三次握手完毕。四次挥手的详解四次挥手数据包的流向:主动连接方去发送同步(FIN)包去请求关闭,被动.

2021-03-17 20:18:55 78

原创 OSI七层网络协议

OSI(开放系统互联)七层网络协议OSI起源:为了是网络更加普及所以推出OSI参考模型,它的含义是推荐所有公司去使用这个规范去控制网络,这样所有公司都有相同的规范就可以相互互联。OSI定义了互联七层框架分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI七层和TCP/IP四层之间的关系:OSI引入服务、接口、协议的功能分层的概念,TCP/IP借鉴了OSI的概念然后建立了TCP/IP的参考模型。OSI:先有OSI模型后有的协议,先有的标准后有的..

2021-03-16 22:39:49 162

原创 golang微服务网关

为什么要学习golang微服务网关?1.亿级流量的网站框架中,网关是一个核心。它作为接入层承载了流量的转发、负载均衡、服务限流、熔断降级等功能。如果一个流量小的单机服务可能不需要网关,但是服务要想横向扩展支持高并发就离不开网关了。大型公司的中台服务比如,ES、Redis要覆盖多个业务线,需要做各种的流量统计、权限校验等,其核心是围绕着网关加底层的服务架构展开的。2.作为一个后端开发者来说掌握网关技术,重要性是不言而喻。掌握网关是后端技术的一个分水岭,懂得设计网关才能知道架构的精.

2021-03-16 22:16:10 2649 1

转载 如何在windows环境下golang并使用protobuf

Protobuf 介绍序列化库在网络传输,RPC,数据库访问等环境中经常用到,它的性能的好坏直接影响着整个产品的性能, 所以我们有必要对一些优秀的序列化库进一步的学习与掌握.protobuf是Google开发的一种数据描述语言语言,能够将结构化的数据序列化,可用于数据存储,通信协议等方面,官方版本支持 Go, C++, Java, Python,社区版本支持更多语言.相对于JSON和XML具有以下优点:简洁 体积小:是json的10分之一,xml格式的20分之一,是二进制序列化的10...

2021-01-27 17:32:42 343

原创 xorm的基本使用

新建结构体type User struct { Id int Name string Age int Address string DeletedAt time.Time `xorm:"deleted"`}新建一个user的结构体指针user := new(User)添加数据user.Name = "张三"user.Age = 12user.Address = "河南" err := engine.Insert(&user)删除数据...

2021-01-14 21:42:00 1026

原创 go变量的初始化

当一个变量被声明,系统会自动赋予他该类型的默认值//a的值为0var a int//b的值为""var b string//c的值为0.0var c float//d的值为falsevar d bool//e的值为nilvar e []int//f的值为nilvar f []string

2021-01-07 10:51:50 117

原创 go上传execl解析数据并存放到数据库

exexl上传其实就是按照约定execl模板内容读取数据。问题由来,由于一个一个手动添加数据太过耗费时间。解决方法 上传execl,上传关键一定要约定execl上传模板,符合execl模板就处理,不符合就不处理。获取第三方库 "github.com/360EntSecGroup-Skylar/excelize"获取上传的execl文件,解析execl的内容为文件流的形式//AddExcel// @Summary Excel上传文件中员工// @Description 由E..

2021-01-06 16:02:54 2227 1

翻译 Go程序设计的一些规则

GO之所以很简洁,是因为它有些默认的行为:1.大写字母开头的变量是可导出的,也就是其他包可以读取的,相当于是公用变量。2.小写字母开头的变量就是不可导出的,其他包不可以读取的,相当于是私有变量。3.大写字母开头的函数时可导出的,也就是其他包可以读取的,相当于class中带pubilc关键词的公有函数。4.小写字母开头的函数就是不可导出的,其他包不可以读取的,相当于class中带private关键词的私有函数。...

2020-12-29 15:46:46 170 1

原创 beego生成swagger后发现swagger文件夹没有swagger样式包

可以直接访问https://github.com/beego/swagger,把swagger的样式文件下载下来然后发现该网络打不开github.com,那么换成自己wifi再次访问该网站即可。

2020-12-02 17:25:01 375

原创 beego生成swagger后路由下commentsRouter_controllers没有生成,导致访问swagger相关接口报404

在执行bee run -gendoc=true -downdoc=true命令后会自动生成swagger,结果发现未生成commentsRouter_controllers

2020-12-02 17:19:42 1430

原创 beego生成swagger访问出现No operations defined in spec!提示

beego生成swagger报错出现No operations defined in spec!提示 解决方案1、查看controllers下面的controller是不是隶属于controllers的如果不是改成隶属于controllers的 ,将其修改成隶属于controllers的再将router中的包引用修改为controllers的接口包路径问题解决...

2020-12-02 16:50:29 1867

转载 goReporter的安装和使用

goReporter的安装和使用简介:一个能够静态分析单元测试代码审查和生成代码质量报告的Golang工具。一、安装goReporter安装命令 go get -u github.com/360EntSecGroup-Skylar/goreporter注意:使用前提是需要确保两个环境变量 %GOPATH%和 %GOROOT%都写进了Path环境变量中。二、使用goReportergoreporter -p F:GoJetBranins\src\GoDemo -rE:workspa..

2020-11-12 13:49:36 1574

原创 go小试牛刀之ORM操纵mysql(二)

前言xorm是一个简单而强大的GO语言ORM库。通过它可以使数据库操作非常简便。xorm的目标并不是让你去学习SQL,我们认为的SQL并不会被ORM所替代,但是ORM将可以解决大部分简单的SQL需求。XORM支持两种风格的混用(SQL/ORM)下面的几个操作里面我们都将采用同一个数据库表结构:数据库test,学生表studentCREATE TABLE student (id int(...

2019-09-24 16:40:42 115

原创 go小试牛刀之ORM操纵mysql(一)

前言xorm是一个简单而强大的GO语言ORM库。通过它可以使数据库操作非常简便。xorm的目标并不是让你去学习SQL,我们认为的SQL并不会被ORM所替代,但是ORM将可以解决大部分简单的SQL需求。XORM(re木)支持两种风格的混用(SQL/ORM)下面的几个操作里面我们都将采用同一个数据库表结构:数据库test,学生表studentCREATE TABLE student (id...

2019-09-24 15:55:07 210

原创 史上最详解golang操控数据库实现多对一的CRUD

史上最详解golang操控数据库实现多对一的CRUD前言Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能:sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作.sql.DB 为我们管理数据库连接池需要注意的是,sql.DB表示操作数据库的抽象访问接口,而非一个数据库连接对象...

2019-09-23 16:55:47 1060 1

空空如也

空空如也

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

TA关注的人

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