控制类
->网络类
->数据库
->线程池
数据库
注意事项
1.安装mysql数据库服务器
2.安装开发库:libmysqlclient
3.编译需要添加 -lmysqlclient
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev ->develop开发库
4.添加对中文的支持:
show variables like '%char%' (默认是latinl)检查字符集
sudo chmod a+w mysqld.cnf 修改为可写
sudo chmod 644 mysqld.cnf 恢复权限为644
原先的:
![[Pasted image 20240328090308.png]]
后来的
![[Pasted image 20240328085603.png]]
登录mysql的命令:
mysql -u root -p;
-u:登录的用户名 -p登录密码。
![[Pasted image 20240329085651.png]]
Vim
安装:sudo apt install vim
vim test.log ;创建文件
i:进入编辑模式
Esc退出编辑模式
保存并且退出: :+wq
![[Pasted image 20240328100918.png]]
线程池
先进先出:先来先服务。
![[Pasted image 20240328101243.png]]
![[Pasted image 20240328101341.png]]
循环队列怎么写?
![[Pasted image 20240328101426.png]]
![[Pasted image 20240328101452.png]]
线程池类:
![[Pasted image 20240328101736.png]]
生产者和消费者模型
生产者负责生产数据
消费者负责消费数据
生产者:
![[Pasted image 20240328105017.png]]
消费者:
![[Pasted image 20240328105025.png]]
队列:
负责线程通信:用于控制
![[Pasted image 20240328104951.png]]
主函数
![[Pasted image 20240328105231.png]]
网络类—epoll模型
多路IO复用
为什么使用epoll?
同步阻塞多线程,具有编程简单,问题少等优点,但不足是无法处理过多客户端
使用多路复用lO模型中较优秀的epoll ,可以解决上面的问题,并且处理网络请求效率高,被多数优秀服务器作为首选模型
服务服务器需要管理多个客户端连接,而Recv 只能监视单个socket,epoll 的诞生就是高效地监视多个socket。
为什么使用阻塞socket?
这里阻塞socket, 指accept客户端连接后,返回的套接字,这种阻塞套接字好处在于代码简单,出错少,更适合入口学习.但也有不可避免的IO效率问题,
![[Pasted image 20240328114505.png]]
ET和LT
![[Pasted image 20240328115924.png]]
同步和异步IO的差别
![[Pasted image 20240329090201.png]]
![[Pasted image 20240329090252.png]]
总结:
非阻塞的send和recv一次性无法接受完数据包,需要加锁。需要循环接受。
![[Pasted image 20240329090944.png]]
阻塞和非阻塞
![[Pasted image 20240329091234.png]]
反应堆reactor模型
![[Pasted image 20240329091530.png]]
用来干嘛?
epoll管理IO的编码流程
网络流程图
![[Pasted image 20240329091724.png]]
线程安全与不安全
即:数据损坏、重复计算
加锁机制的使用。线程安全是指在多线程访问共享资源时,通过加锁机制确保每次执行的结果与单线程执行的结果一致,防止数据不一致或数据污染。例如,当一个线程正在访问某个数据时,其他线程不能访问该数据,直到该线程完成访问并释放锁。
代码分析:
block_epoll_net.h
MyMap:对map加锁,实现线程安全
Block_Epoll_Net:
耦合
耦合是指两个或多个系统或模块之间的相互依赖和影响程度。
回调函数
即函数作为参数。降低耦合
![[Pasted image 20240329101341.png]]