同步与异步模式简介同步
同步模式下,程序会等待某个操作完成后再继续执行后续代码
典型场景:阻塞式 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
优点:高...
回顾一下之前做的轻量级高并发网络服务器项目
项目部署在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&...
这是一个轻量级异步日志器(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 将单...
一些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...