一、前情提要
上一篇我们介绍了Mutex锁资源的模式及源码分析。mutex处于正常状态时,申请锁时与自旋状态的goroutine抢占锁失败时,会将对应的goroutine放在等待队列的头或者尾(若是唤醒的goroutine则是队头,若是新创建的goroutine则是队尾)等待唤醒;mutex处于饥饿状态时,申请锁时若没有锁资源则直接放在队尾。
more >>上一篇我们介绍了Mutex锁资源的模式及源码分析。mutex处于正常状态时,申请锁时与自旋状态的goroutine抢占锁失败时,会将对应的goroutine放在等待队列的头或者尾(若是唤醒的goroutine则是队头,若是新创建的goroutine则是队尾)等待唤醒;mutex处于饥饿状态时,申请锁时若没有锁资源则直接放在队尾。
more >>乐观锁操作数据的时候很乐观,认为没有人同时修改数据,因此乐观锁不会上锁,在执行更新的时候判断在次期间别人是否修改了数据,如果修改了则进行回滚。使用版本号机制或者CAS算法实现。通常读多写少使用乐观锁。
版本号机制:修改数据的时候获取版本,更新操作进行的时候带上版本,若版本一致才会进行修改
more >>这是Golang源码分析之net/http主题的第二篇,我们已经在上一章节了解了TCP通信的基础框架,现在进入正真的源码分析
以下源码基于go1.14.13 windows/amd64进行分析
我们写一个C/S例子
service监听1234端口,设置路由为/hello,处理函数为HelloServer
more >>本文代码均为golang 版本:go1.14.13
Socket(套接字),用来描述IP地址和端口,是通信链的句柄。应用程序可以通过socket向网络发送请求或者应答请求。Socket是支持TCP/IP协议的网络通信的基本操作单元,是对通信端点的抽象表示,包含进行通信的所必须5种信息:连接使用的协议、本地IP/端口、远端IP/端口。
在应用程序中,socket对应一个描述符;在内核中,它对应一个管理通信过程的对象(socket struct结构) 。在Linux系统内核中,struct socket结构对象不仅封装了管理通信过程的数据信息,而且封装了负责网络通信的功能函数。通过这些接口,应用程序触发系统调用来使用上述功能函数,从而访问网络服务。
more >>以下源码分析基于go1.14.13版本
Golang的Map数据结构底层原理是哈希桶,解决冲突Hash的冲突使用的是开散列,也就是将具有相同关键码的元素用单链表连接起来
哈希桶的原理:哈希桶使用顺序表来存放Key链表的头结点,每一个Key有对应的链表。
如有以下数字[1,6,8,11,13,14],hash(key)=value%5,存储在hash表如下图:
值类型和引用类型
值类型:int,float,bool,string,struct和array。变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放
引用类型:slice,map,chan和值类型对应的指针。变量存储的是一个地址(或者理解为指针),指针指向内存中真正存储数据的首地址。内存通常在堆上分配,通过GC回收。
对于引用类型的变量,不仅要声明这个变量,还要手动为其分配空间。make和new都在堆上分配内存。
more >>Redis(remote dictionary server)是一种NoSql类型数据库。
什么是NoSql数据库?
现在随着现阶段业务海量用户以及高并发业务,使得关系型数据库遇到很多瓶颈。例如:性能瓶颈,读写大量数据,使得磁盘IO性能低下;扩展性能差,在数据关系更复杂的情况下,关系型数据库扩展性变差,不再满足大规模集群。
more >>设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
通俗来说:是一个项目的代码层面设计架构,代码功能的排版。相当于模板。这些模式都是巨人们在软件系统中总结出的成功的、能够实现可维护性复用的设计方案
more >>本文主要详细介绍Mysql索引基本原理,相信读了这篇文章,对于索引不止停留在课堂老师讲的图书馆图书索引,会更加深入理解索引的本质。这样对于怎么优化Mysql,就不止停留在背那几条规则,而是更理解规则之后的原理。
索引:实际是一种数据结构。帮助mysql高效获取数据,为什么高效,因为创建索引的数据是按照一定的数据结构排序进行存储的。
索引的数据结构:
more >>
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true