13k 词
同步与异步模式简介同步 同步模式下,程序会等待某个操作完成后再继续执行后续代码 典型场景:阻塞式 socket 通信,read/write 操作会阻塞线程直到数据收发完成 优点:编程简单,逻辑清晰,易于理解和调试 缺点:效率低,无法充分利用多核资源,容易造成线程阻塞,难以支撑高并发 void session(socket_ptr sock){ for (;;) { char data[MAX_LENGTH]; size_t length = sock->read_some(boost::asio::buffer(data, MAX_LENGTH), error); // ...处理数据... boost::asio::write(*sock, boost::asio::buffer(data, length)); } } 异步 异步模式下,操作会立即返回,实际的读写操作在后台进行,完成后通过回调函数通知主程序 典型场景:事件驱动的高性能服务器,利用回调机制处理 I/O 优点:高...
24k 词
回顾一下之前做的轻量级高并发网络服务器项目 项目部署在VMware的乌班图系统上,运行效果如下: 终端启动: 浏览器访问: 系统流程主线程用epoll这种多路复用机制监听客户端连接,当有read或者write事件发出请求时,将请求加入到线程池,线程池中的一个线程争抢到锁,开始执行任务,任务包括解析请求与生成响应,包括对信号的序列化与反序列化,最终发布的静态资源为js页面,这里简单让ai写了一个电子木鱼的效果并进行一些润色,系统适配Linux。 线程池类 head-only threadpool class #ifndef THREADPOOL_H #define THREADPOOL_H #include <pthread.h> #include <cstdio> #include <list> #include <exception> #include "locker.h" using namespace std; // 线程池类 template&...
5.8k 词
这是一个轻量级异步日志器(async logger)。目标是用现代 C++(线程、互斥、条件变量)实现一个线程安全、低阻塞的日志写入方案:生产者将格式化后的日志消息推入队列,后台消费者线程异步写入文件并可选地输出到终端。整体实现包含一个简单的占位符格式化(暂用{},可自行修改)、类型到字符串的通用转换和优雅的后台线程关闭机制。 hpp #ifndef MY_LOG #define MY_LOG #include <iostream> #include <queue> #include <mutex> #include <string> #include <condition_variable> #include <thread> #include <fstream> #include <atomic> #include <sstream> #include <vector> #include <stdexcept> /** * @brief 将单...
34k 词
一些C++中经常会接触的概念,包括中间件,数据结构封装等模块 了解原理,实现基本功能,实际运用的时候还需要根据具体需求进行扩展和优化 一般肯定直接用STL封装好的 内存池 Memory Pool 共享指针 Shared Pointer 函数封装 Function Encapsulation 双向链表容器 List 双端队列容器 Deque BST和AVL实现map 1. 基于二叉搜索树 (BST) 的实现 2. 基于 AVL 树的实现 无序映射表 unordered_map 单例模式 Singleton 内存池 Memory Pool内存池是一种预先分配一大块内存,然后按需分配小块内存的技术 内存池可以减少频繁的内存分配和释放操作从而提高性能 用一个栈实现: classDiagram class MemoryPool { char* _pool size_t _objectsize size_t _totalsize stack~void*~ _freelist void* a...