自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 异步请求池

一.同步与异步同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等下去,直到收到返回信息才继续执行下去。异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有信息返回时系统会通知进程进行处理,这样可以提高执行的效率。二.异步请求池实现的架构异步请求池不管是mysql请求池,redis请求池还是DNS请求池,只要遵循**“零声学院”**的king式四元组,就能按部就班实现出来,下面介绍一下king式四元组。所谓的king式四元组,

2021-03-28 01:01:08 250 1

原创 内存池的实现原理

一.为什么需要内存池内存分配需要时间消耗,当进行大量内存分配和释放时,在一定程度上会影响性能。更糟糕的是,随着时间的流逝,会产生很多内存碎片,导致程序性能下降。一个有效解决该问题的方法是内存池:在启动的时候,通过预先分配出一块大的内存,并将这块大的内存分成较小的块,形成一个内存池。每次申请内存的时候,从内存池已经分配的快中取出,用完之后再归还给内存池。内存池的优势在于:  1.将大量小内存的申请聚集到一块,能够比malloc 更快  2.减少内存碎片,防止内存泄漏  3.减少内存管理复杂度二.内

2021-03-27 14:47:48 729

原创 数据库池的实现

1.池化技术池化技术能够减少资源对象的创建次数,提高程序的响应性能,特别是在高并发下这种提高更加明显。使用池化技术缓存的资源对象有如下共同特点:对象创建时间长;对象创建需要大量资源;对象创建后可以被重复使用;像常见的线程池,内存池,连接池,对象池都具有以上的共同特点。2.什么是数据库连接池定义:数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地池中的连接进行申请,使用,释放。大白话:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在

2021-03-25 00:40:56 604

原创 线程池实现原理

线程池是一种多线程处理形式,大多用于高并发服务器上,它能合理有效的利用高并发服务器上的线程资源;线程池允许一个线程可以多次复用,且每次复用的线程内部的消息处理可以不相同,将创建与销毁的开销省去而不必来一个请求开一个线程;线程池是一个抽象的概念,其内部由任务队列,一堆线程,管理者线程组成。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210321214335437.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5na

2021-03-22 00:51:55 118

原创 网络编程模型

一.网络编程关注的问题连接建立这个过程主要是TCP 三次握手过程第一次握手客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J, 服务器是被动打开(passive open),此时客户端状态出于SYN_SENT状态第二次握手服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户, ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K,此时服务器出于SYC_ACK状态第三次握手客户在收到新SYN K, ACK J

2021-03-21 21:10:52 126

原创 tcp支持浏览器websocket协议

一、websocket是什么?websocket是一个基于应用层的网络协议,建立在tcp协议之上,和http协议可以说是兄弟的关系,但是这个兄弟有点依赖http,为什么这么说?我们都知道http实现了三次握手来建立通信连接,实际上websocket的创始人很聪明,他不想重复的去造轮子,反正我兄弟已经实现了握手,我干嘛还要重新写一套呢?先让它去冲锋陷阵呢,我坐收渔翁之利不是更香吗,所以一般来说,我们会先用HTTP先进性三次握手,再向服务器请求升级为websocket协议,这就好比说,嘿兄弟你先去给我排个队占

2021-03-13 18:30:40 626 1

原创 服务器模型Reactor

对高并发编程,网络连接上的消息处理,可以分为两个阶段:等待消息准备好,消息处理。当使用默认的阻塞套接字时,往往是把这两个阶段合而为一,这样的套接字的代码所在的线程就得睡眠来等待消息准备好,这导致了高并发下线程会频繁的睡眠,唤醒,从而影响了cpu的使用率。  高并发编程方法当然就是把两个阶段分开处理。即等待消息准备好的代码段,与处理消息的代码段是分离的。当然,这也要求套接字必须是非阻塞的,否则,处理消息的代码段很容易导致条件不满足时,所在线程又进入了睡眠等待阶段。那么问题来了,等待消息准备好这个阶段怎么实现

2021-03-10 23:51:51 85

原创 网络 IO 管理

网络 IO 管理教程网络 IO,会涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,另一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程中。因为在以上两个阶段上各有不同的情况,所以出现了多种网络 IO 模型五种 IO 网络模型阻塞 IO(blocking IO)在 linux 中,默认情况下所有的 socket 都是 blocking,一个典型的读操作流程  当用户进程调用了 read 这个系统调

2021-03-08 00:11:30 162

原创 设计模式

设计模式是指在软件开发中,经过验证,用于在特定环境下,重复出现的,特定问题的解决方案模式设计的原则有如下几种:1.依赖倒置原则: (1)高层模块不应该依赖低层模块,二者都应该依赖抽象 (2)抽象不应该依赖具体实现,具体实现应该依赖于抽象从上面的图来看自动驾驶是高层,各个产商是低层,他们不应该相互依赖,一方变动另一方也会跟着变动;而是应该抽象一个自动驾驶行业标准,高层和低层都依赖它,这样以来就解耦了两方的变动;自动驾驶系统,汽车生产产商都是具体实现,他们应该都依赖自动驾驶行业标准(抽象)2.开放

2021-01-31 15:43:30 63

原创 布隆过滤器

直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。首先需要k个hash函数,每个函数可以把key散列成为1个整数初始化时,需要一个长度为n比特的数组,每个比特位初始化为0某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1判断某个key是否在集合时,用k个hash函数计算出k个散列

2021-01-17 14:22:45 59

原创 B树和B+树

B-树即B树,B树又叫平衡多路查找树,一颗m阶的B树(m叉树)的特性如下:1.树中的每个节点最多含有m个孩子(m >=2)2.除根节点和叶子节点以外,其他每个节点至少有【ceil(m/2)】个孩子3.若根节点不是叶子节点,则至少有2个孩子4.所有的叶子节点都出现在同一层,叶子节点不包含任何关键字的信息5.每个非终端节点中包含n个关键字信息:(n,P0,K1,P1,K2,P2,…,Kn,Pn)。其中:a) Ki (i=1…n)为关键字,且关键字按顺序升序排序K(i-1)< Ki。

2021-01-16 01:47:58 118

原创 二叉树总结

二叉树也称为二分树,二元树,对分树等,它是n(n >> 0)个有限元素的集合,该集合或者为空或者由一个称为根(root)的元素及两个不相交的,被分别称为左子树和右子树的二叉树组成。当集合为空时,二叉树也称为空二叉树。在二叉树中,一个元素也称为一个节点。二叉树的递归定义为:二叉树或者是一颗空树,或者是一颗由一个根节点和两棵互不相交的分别称为根节点的左子树和右子树所组成的非空树,左子树和右子树又同样是一棵二叉树。这里就不讨论二叉树的基本概念,详细请参考百度。二叉树...

2021-01-11 23:22:22 654

原创 排序算法总结

常用排序算法常见的排序方法有时种,下面通过go语言演示一下排序方法1. 希尔排序算法思想:希尔排序是插入排序的一个变种,先让数组中任意间隔h的元素有序,然后让间隔成倍缩小,刚开始h=n/2,接着让h=n/4,当h=1的时候,这个时候整个数据都是有序的。func shellSort(arr []int) { length := len(arr) var i, j int for gap := length / 2; gap > 0; gap /= 2 { for

2021-01-09 18:27:58 88

空空如也

空空如也

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

TA关注的人

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