- 博客(18)
- 收藏
- 关注

原创 从零造的一个网络轮子
从零造的一个网络轮子一 类图及各类简述一 类图及各类简述首先,在整个类图中,绿色部分是分别在客户端和服务端可直接使用的三个类,蓝色部分的两个类则是两个单例对象。1.CServiceNoBlock:是一个服务端的类,所有socket全都通过非阻塞模式进行accept、recv、send等行为,每次循环都会对所有socket进行操作,类似于轮询。2.CServiceEpoll:继承自CServiceNoBlock,行为和CServiceNoBlock基本一样,主要区别在于:在对套接字进行轮询之前,使用
2020-12-09 22:25:14
591
1
原创 redis随便写点
srandmember key [count] 随机返回一个,如果传了count,正数返回不相同的count个,负数返回|count|个可能相同的。id,可以自己写,也可以用星号代替,id的格式是[unix时间戳-这个时间戳的第几条],使用*时,该命令的返回值是id。键的分配:所有的键都会经过crc16求hash,然后求余16384得到一个槽id,所以一共有0-16383个槽。槽的分配:集群创建时,16384个槽,分配个每个节点,命令操作键,会先找键在哪个节点,然后去对应节点上找,
2023-07-20 21:09:43
155
1
原创 高性能mysql 随笔
mysql的三层架构: 第一层是管理客户端连接的。 对于每个客户端连接,都会从管理的线程池中取出一个为其服务 第二层是语句查询、语句解析、语句优化,一些select的缓存、还有内置函数、存储过程视图之类的管理。 查询语句的优化则是再内部的解析器对语句重构以提升执行效率。 第三层是存储引擎,主要负责数据的存取,建表时可以选择不同的引擎,不同的引擎各有优劣。 比如MyISAM不支持事务却使用表锁,innoDB使用行锁却支持事务。并发控制 关于锁的上锁方式,分为两种....
2022-07-09 08:24:33
363
原创 一个c++RPC实现
一个c++RPC实现简述1.线程池2.RPC2.1RpcServer2.2RpcClient3.测试简述 1.本文主要由三个部分,第一个是线程池的实现,第二个是RPC的实现,第三个是一些测试的代码。 2.ROC网络的部分使用我另一篇文章的网络服务实现,所以这里的RPC实现完全没有一行关于网络的代码。 3.因为使用的是现成的网络轮子,很多地方的接口也不得不受限于其提供的接口。1.线程池 这个线程池是我直接拿来别人的改改,来自link. threadpool.h文件class CThr
2021-11-16 16:20:12
3924
3
原创 《UNP卷二》随笔
UNP卷二随笔一二三四 管道和FIFO一 进程间通信的方式有三种: ①文件系统。通过read、write等函数,穿过内核,于文件系统上实现进程之间的共享,当然这需要某种同步操作。这种类型的持久性基于文件何时被删除。 ②内核。在内核上建立的某个<进程间通讯的对象>,不同进程间通过调用一组相关函数,通过这个对象在进程间传递信息。其持久性不会随着进程结束被删除,只有显示调用某个删除操作,或者内核重启,这种对象才会消失。例如posix消息队列(今天刚看到这)。 ③进程。这类
2021-11-12 09:49:35
462
1
原创 《STL源码剖析》随笔
STL源码剖析随笔第二章 空间配置器第三章 迭代器与traits第二章 空间配置器 内存分配过程 STL的内存分配分为两级。 第一级是在所需分配内存大于128字节时。 此时只使用malloc分配内存,当malloc无法取得有效内存时,则会调用名为’内存不足处理例程’,调用该函数后依旧无法成功取得内存,就抛出异常。 第二级是在所需分配内存小于128字节时。 第二级则是为了解决内存碎片问题。其维护16个自由链表,分别是 8~128字节中8的倍数,这些内存被初
2021-02-10 20:13:28
255
原创 《winodws核心编程》随笔
winodws核心编程随笔第一章 错误处理第二章 字符及字符处理第一章 错误处理 1.WINDOWS版本的errno 当函数出错,不同的返回值类型有不同的描述,分别是: ①VOID 该类型的API不会失败 ②BOOL 失败返回0,否则返回一个非0值 ③HANDLE HANDLE标识一个可以操纵的对象,失败一般返回NULL,有些函数返回INVALID_HANDLE_VALUE(-1)。 ④PVOID 该类型标识一块内存地
2021-02-04 17:07:16
681
原创 《TCP/IP详解卷一》随笔
TCP/IP详解卷一随笔概述以太网协议ARP & RARPICMP概述链路层。主要包括操作系统的设备驱动程序和计算机的网卡接口。网络层。处理网络中的分组传输。传输层。提供端到端的服务,本书主要涉及TCP和UDP。应用层。负责处理应用程序细节,程序处理数据后交给套接字。TCP/IP协议族是一组不同的协议组合的。TCP和IP只是其中两个协议。在链路层,主要有以太网协议、ARP、RARP三个协议。在网络层,主要有IP、ICMP、IGMP三个协议。在传输层,主要有TCP、UDP两个协议。
2020-10-28 20:39:06
654
原创 《深度探索C++对象模型》随笔
深度探索C++对象模型随笔第一章 关于对象第二章第三章第四章第五章第六章第七章第一章 关于对象 1. C++中,有两种数据成员: ①静态数据成员②非静态数据成员 三种成员函数: ①静态成员函数②非静态成员函数③虚函数 2. 静态数据成员放在类之外,非静态数据成员被配置与每一个类对象之类 静态和非静态成员函数也放在类之外,虚函数则是特殊情况: ①每个类产生一堆指向其虚函数的指针,集合在一个表格中,该表成为虚函数表(vtbl) ②每个类对象被安插一个指针,
2020-10-22 23:45:13
320
原创 《Effective C++ 55&35》随笔
Effective C++ 55&35 随笔Effective C++ 55More Effective C++ 35大概很有以前看过这两本书,不过那时候知道的也不太多,笔记在OneNote上也是乱七八糟的,后来因为某些原因在OneNote上的笔记怎么也找不到了,重新看一遍好好整理整理。其中一些不怎么重要部分就被跳过了。Effective C++ 55 02条: 尽量以const enum inline 替换#define ①对于单纯常量最好以const对象或者enum代替def
2020-10-15 23:37:35
359
原创 muduo一书随笔
muduo一书随笔第一章 线程安全的对象声明周期管理第一章 线程安全的对象声明周期管理 1.不要在对象构造函数 或 析构函数中出现this指针、注册回调、把this指针传递给跨线程对象。因为只要还在构造函数,对象就不是一个被构造好的对象,只要进入析构函数,对象就不是一个完整的对象。在多线程中使用未构造好的对象和已经销毁的对象是不安全的。 2.二段式构造。书中提出多线程情况下用构造函数+init()函数来构造对象,把注册回调这类危险的操作放在init()中,通过init()的返回值来判断对象是否构造
2020-10-15 17:38:14
273
原创 遇到的问题集合(倒序)
一些奇奇怪怪的坑1.远程调试linux,debug和release1.远程调试linux,debug和release 昨晚在win10 vs里,远程调试一个Linux程序,Linux的公网IP是39.x.x.x,接着客户端连接这个IP的时候,总是connect失败。 之后我在linux那边,用服务端的sock调用getsockname,看看他到底是bind的哪个IP。 打印出来之后是一个叫85.85.0.0,的IP。 阿里云服务器防火墙,netstat查看,端口也是设置正确的。 尝试过
2020-07-16 07:52:59
501
原创 《UNP》随笔
UNP随笔第一章第二章这篇文章只是记载了我对于其中不太了解的知识。第一章 errno值:只要某个unix函数(某个系统调用或限定为某个套接字函数)有错误发生,全局变量errno会被置为一个指明错误类型的值。第二章TIME_WAIT状态 其存在的意义是为了解决两个问题: 1.A端发送了FIN后,收到B端的ACK和FIN,最后A端还会向B端发送一个ACK,当最后这个ACK丢失,B端会重发表示自己停止发送的FIN,以期望收到A端确认。 书中提到这个状态最多会维持2MSL,猜测也许如果2MSL
2020-07-13 22:06:17
701
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人