- 博客(23)
- 收藏
- 关注
原创 高并发内存池的实现
首先看下结果:在模拟高并发场景下,本次实现组件的申请释放内存效率,相比较malloc而言,提升性能较为乐观。业务逻辑模型:threadcache:这个是每个线程独享的内存池,不存在临界资源争夺问题,如果线程申请的内存小于你所限定的值,逻辑就直接往这里走,如果说大与阈值,则会向pagecache去申请,那样会导致线程安全问题,但是考虑到在实际使用中,系统不会频繁得去申请大块内存,所以这块不会因为总是释放和申请锁而浪费大量资源。centralcache:该缓存池只存在一个,存在线程安全问题。假设上级
2021-10-25 22:02:01
150
原创 LinuxCentos7 升级gcc的办法!匹配正则表达式
我为了做个项目,里面用到了正则表达式。然后Centos7默认的gcc是4.8.5版本的,支持正则表达式需要4.9以上gcc --versiong++ --version这两个命令用来查看你目前的GCC 和G ++版本下面讲下升级步骤:1、安装centos-release-sclsudo yum install centos-release-scl2、安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推目前我可以搜索到9的。(用yum
2021-09-24 22:25:19
450
原创 打印虚函数的地址(C++)
#pragma once#include<iostream>//Base是基类//Derive是Base的派生类//两者里面的函数我都用了虚函数//我们来看Derive,其中的func1是重写了Base::func1;3/4是他自己的//然后我们现在来通过自定义函数来查看下虚表里,各个虚函数的地址-------PrintfVTable//接下来的注释转到PrintVTablenamespace qcb{ class Base{ public: virtual void f
2021-09-09 18:08:11
677
原创 epoll
epoll e-extern返回文件描述符调用会创建epoll模型重点:select poll epoll都要会select epoll各自的缺点和不同基本的接口的使用,参数…在什么场景使用:长链接
2021-08-25 11:23:42
64
原创 select/poll笔记
IO等于 等待加拷贝!recv == 读io == 读事件就绪+内核数据拷贝至用户空间send == 写io == 写事件就绪+用户空间数据拷贝至内核高效IO的本质是:尽可能减少等的比重自己等自己钓:同步IO让别人钓,自己走了:异步IOselect 和poll 和 epoll 只负责IO中的等...
2021-08-24 21:45:27
65
原创 ip2-网络done笔记
全世界公网就一张全世界的IP被分为公网和私网局域网中的IP可以被重复你能配置的就这几个段其他的公网IP你不能配个人PC向外网发送数据的时候,路由器会把局域网IP转化为自己的WAN网IP,再经过小路由器会一路变化源IP转换,知道进入大公网(NAT)NAT可以解决IP地址不足返回:需要建立映射表u = 有效的g = 下一跳是网关网关一般都是 .1主机号 就是网络号之后的第一个路由表查找:在路由表里查找目标Ip没找到就通过默认路由跳出去在网线上跑的不是IP包,是以太网帧局
2021-08-23 16:26:14
262
原创 IP1基础笔记
TCP报头需要背/IP协议报头也要会默写TCP可靠性的体现TCP的提高效率方式TCP物理断开网络,最后双方都可以断开链接重要性 HTTP TCP IPIP给通信双方提供了一种能力:将数据A主机送到B主机。IP不保证可靠性,丢了就丢了在哪一层,就有用以下层的功能和当前层的功能。路由器起码有两个IP集线器:信号放大。IP能在公网中唯一标识一台主机mtu 最大传输单元底层网卡最大传输载荷,默认1500IP分片是IP知道的 IP分的 默认mtu1500 20+2980 的ip报给
2021-08-22 23:08:55
494
原创 TCP4笔记
确认序号:当前序号之前的 全部 收到了我5000-6000收到了 但是2000-3000丢了 那么我只会发2001的序列号,不会发6001等应用层把数据取走再给你ACK 因为这个时候我的接收缓冲区更大。确认和数据一起发送了,本质就是把ACK标志位变成1就可以了。。。UDP不存在粘包,因为他有总长度和首部长度进程崩溃,TCP链接会被自动释放,底层会自动触发四次挥手,让对方也知道断了系统底层的队列 当服务器当前处理队列有空位的时候,赶紧从这个底层队列拉数据上来。但是这个队列也不能
2021-08-22 20:00:58
66
原创 TCP2笔记
TCP是面向字节流的,不是说你send几次,它就实际传送几次,send把内容拷贝给内核发送缓冲区,发多少,一定取决对方这次能收多收。序号取决有效载荷。光发报头不占序号超时重传的两种情况,给接收方的影响:接收方如果收到重复数据,接收方需要去重…降低了效率//怎么知道它重复呢?更具报文的序号所以序号的第二个作用:去重超时重传的时间一定是浮动的,根据网络状况来。如果是四次握手,最后一个报文是服务器发的,那么服务器先以为链接建立成功了,服务器先投入成本维护链接不管几次握手,最重要的都是最后一次发送AC
2021-08-22 15:18:43
163
原创 TC1P笔记
长短链接:这个叫短链接请求一个资源就释放链接,建立链接成本很高。长链接:在一次建立通信之中,多次发送request和response在完成一个完整网页之后,再断开此次链接。解决效率问题。http有能力区分多个请求。数据必须按序到达:TCP保证。所以http不担心数据行乱序UDP不保证可靠性UDP报头定长有效载荷就是16位UDP长度-8字节UDP校验合失败后算这个报文直接丢失了。然后啥也不干要么必须要读一个完整的报文UDP没有发送缓冲区,直接报头一摘,直接把有效载荷给网络层。
2021-08-22 00:56:17
192
原创 HTTPTCP1笔记
http自己没有状态,但是cookie/session维护了这个状态,是用户需求这个状态有些404特别搓 是因为正规404返回的是一个规划好的404页面,有些人是只返回404一个数字临时重定向和永久重定向区别在于:以后还回不回来重定向了直接跳转到百度浏览器会基于location再次发送对应请求可以把网页写在其他地方https 就是加了这个SSL其实一个东西对称加密:一个密钥,加密解密都用这个对称加密的缺点:密钥怎么传输呢…密钥怎么让对方知道…总的把raw
2021-08-21 20:27:48
53
原创 HTTP笔记
HTTP特征只要底层信道建立好了,应用层HTTP就不用建立了。所有的协议解析都是数据分析,所以要求数据可靠安全。rul:资源目录http构成请求正文可以看成是有效载荷,上面三个可以看成是协议报头这里有个content-length来确定正文长度, 空行来断开报头和正文抓包工具的原理:浏览器的HTTP请求给fiddler转发...
2021-08-21 14:19:51
45
原创 socket总结http1
一个函数模板,把相同参数,相同返回值的函数封装成一个模板类将四字节的网络地址转换成点分十进制的字符串形式IP地址这个函数的返回值存储在静态区,会造成线程安全的问题。
2021-08-20 14:00:16
65
原创 socketdone笔记
填充套接字信息客户端不用监听,监听本质是让服务器处于某种状态,可以随时随地让别人来连我更不用accept,因为没有listen连接成功返回0,失败返回-1read和write不能用来做udp现在是只开启了服务器现在客户端和服务器连接了,这次可以打空格了每行都有间隔的原因:cin会过滤掉回车键,但是read不会过滤回车键bug现象,当客户端退出,然后再连接,发现连不上服务器了(服务器阻塞了)修改bug:服务器的server接口是个死循环函数,当客户端退出的时候,服务器需要知道这个.
2021-08-19 15:51:18
112
原创 socket2套接字笔记
主要学习 这种类型的套接字sockaddr是给用户层提供的一种数据结构,本质上是操作系统提供的接口(数据类型),它本质上是一种通用结构。套接字常见的一共分为三类套接字。套接字通信本质上属于进程间通信的一种ip+端口号=socket端口号用来标定特定一台机器上唯一的网络进程网络字节序为大端创建套接字,第一个参数表示IPV4(协议族),第二个是udp传输(套接字种类),第三个参数默认为0返回值是一个文件描述符,创建套接字就和打开一个file*一样的,也就是说,操作系统里一个进程可以打开多个套接
2021-08-18 23:06:03
187
原创 socket套接字笔记1
套接字通信本质叫做进程间通信端口号:标定目标IP主机上的某个进程IP+端口号标识全网内唯一的一个进程IP+端口号就叫做套接字在这里插入图片描述socket的公共资源是网络不是所有的进程都是网络进程端口号只有网络进程有PID是每个进程都有的一个端口号只能标一个进程但是一个进程可以绑定多个端口号网络字节序:默认网络上跑的都以大端存储发送和接收的时候,自己的操作系统再自己做决定需不需要转字节序列操作系统内核用4个字节,把IP地址划分为4个区域 来表示IP地址AF_INET表示IP
2021-08-18 00:12:30
67
原创 网络基础2笔记
协议是一种约定,最终在操作系统上以结构体的形式呈现。在网络传输时候,实际传输的数据比用户想要发送的核心数据要多,多出来的内容是协议。协议+数据 == 数据报网络协议为什么要分层?想汉堡一样,各层分别独立,可维护性强网络层状结构每层都有自己的特定功能,解耦,方便维护数据链路层解决局域网通信的问题OSI七层----》实际落地 TCP/IP五层(四层-物理层)结构链路层已经涉及驱动了,驱动也属于软件应用层数据+应用层协议----发送给传输层;传输层把收到的再加自己传输层的协议发给网络层;网
2021-08-17 15:15:10
45
原创 线程最后部分(网络基础1)
环形队列的生产者和消费者访问不同下标,除了满或者空,也因为这个原因,这个模型里,生产者和消费者可以同时执行。读者写者问题常见解决读多写少,但是不仅限于此读者写者模型:有一批数据,读的人特别多,修改的人特别少。读者写者的3211:有多个读线程和若干个写线程,在一个内存区域负责数据操控。2:读者、写者3:读者和读者:共享 ;写者和写者:互斥 ;读者和写者:互斥且同步和消费者模型相比最重大的区别特别的地方:在加锁这里如果你是读者,就调用读加锁如果你写者,就调用写加锁读优先:可能会导致写
2021-08-16 23:55:57
41
原创 多线程笔记5
二元信号量等价于互斥锁消费者慢现象:每来一个任务都要创建线程,创建线程需要资源成本线程池可以保证服务器的线程数量是稳定的,从而在大规模任务来临时,不会让服务器宕机惊群效应–震荡幅度太大单例模式初识:封装一个单例的类,类内部有一个静态的成员变量,想使用这个变量的时候,统一用一个接口取访问,返回他的指针、地址饿汉模式:每次吃完饭都把碗洗了,在类中定义静态对象,类加载,对象也被创建了,所以在想用这个对象的时候,直接用懒汉模式:吃完饭不洗碗,下次吃之前再洗碗,想
2021-08-16 20:33:44
46
原创 多线程4笔记
进程创建进程,主线程创建新线程,谁线运行都是调度器说了算。.hpp文件 ->可以把类的声明和实现写在一个文件里面,而且可以被Include.cc = .cxx = .cpp 都是c++文件后缀生产者消费者模型如果生产者和消费者双方速度差距较大,那么快的一方需要等待慢的一方,需要一个条件变量,如果双方差距不大,就需要创建两个条件变量互相通知。为什么pthread_cond_wait(&p_cond,&lock)为什么这里条件的等待要传入一个lock?在调用该函数的时候,自动会
2021-08-16 15:59:06
40
原创 【内卷套餐】多线程3
原子性:简单说就是需要对应一条汇编代码,多了不行,像变量自增,需要从内存搬运到CPU计算再搬运回来,对应三条汇编操作。对临界区进行保护,所有的执行线程都必须遵守这个规则。lock->访问临界区(花时间)->unlock,在特定/进程线程拥有锁,期间有新的线程过来申请锁,它是一定申请不到的,所以会被阻塞,将线程/进程对应的PCB投入到等待队列,unlock之后,进行进程\线程的唤醒操作,放入run队列所有的线程必须先看到同一把锁,所以锁本身就是临界资源,所以锁必须先保证自己的安全!申.
2021-08-14 23:44:15
41
原创 【内卷套餐】线程的控制/互斥锁
单执行流的进程,其PID和LWP相同,所产生的次线程LWD开始与PID不同。OS内核区别执行流其实是看LWP,从此PID的主要作用是查看该资源是属于哪个进程的。其中的 && 相当于语言中的逻辑与,前半部分执行成功才执行后半部分主线程结束,进程就退出了!因为进程是承担系统资源的基本实体!主线程退出,其他线程也就退出了。线程退出的方案-用pthread_join()+return(void*) number code接收,必须有这个,不然也会形成僵尸线程,默认是用阻塞方式等待接.
2021-08-14 19:43:31
70
原创 【内卷套餐】Linux线程概念和创建
什么是线程?线程是进程的执行分支,线程的粒度是比进程更细的。本来一个进程只有一个PCB的时候,代码是串行的(一股执行流),现在我有多个PCB了,并且把进程地址空间中的用户区域也被分成相应的PCB数量了,如果我的CPU是多核的,那么我就可以有多股执行流了,我进程里的代码就可以并行执行了。以前是一个进程一个PCB,现在是一个进程,多个PCB,并且该进程所创建的进程地址空间中的代码区被分成多个区。创建新"进程”的时候,我只创建PCB,但是我不创建进程他们各自的地址空间了,我把他们PCB中所要指向的地址空间
2021-08-14 13:38:30
57
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人