当前位置: 首页 > news >正文

网站是用织梦系统做的首页打开超慢青岛网站开发培训

网站是用织梦系统做的首页打开超慢,青岛网站开发培训,wordpress分享到微博才能看到,做原创的网站项目完整版在#xff1a; 一、buffer模块#xff1a; 缓冲区模块 Buffer模块是一个缓冲区模块#xff0c;用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据#xff0c;取出数据 三、实现思想 1.实现换出去得有一块内存空间#xff0c;采…项目完整版在 一、buffer模块 缓冲区模块 Buffer模块是一个缓冲区模块用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据取出数据 三、实现思想 1.实现换出去得有一块内存空间采用vector ,vector底层是一个线性的内存空间 一要素 1.默认空间大小 2.当前的读取数据位置 3.当前的写入数据位置 二操作 写入位置 当前写入位置指向哪里从哪里开始写入 如果后续剩余空间不够了考虑整体缓冲区空闲空间是否足够因为读位置也会向后偏移前后有可能有空闲空间 足够将数据移动到起始位置 不够扩容从当前写位置开始扩容足够大小 数据一旦写入成功当前写位置向后偏移读取数据 当前的读取位置指向哪里就从哪里开始读取前提是有数据可读 可读数据大小当前写入位置减去当前读取位置 三框架设计 class buffer {private:std::vectorchar _buffer;// 位置是一个相对偏移量而不是绝对地址uint64_t _read_idx; // 读位置uint64_t _write_idx; // 写位置public:1. 获取当前写的位置2. 确保可写空间足够3. 获取前沿空间大小4. 获取后沿空间大小5. 将写入据位置向后移动指定长度6. 获取当前读取位置的地址7. 获取可读空间大小8. 将读位置向后移动指定长度9. clear四、实现代码 #include ctime #include cstring #include iostream #include vector #include cassert #include string using namespace std; #define BUFFER_SIZE 1024 class Buffer {private:std::vectorchar _buffer; // 使用vector进行内存空间管理uint64_t _read_idx; // 读偏移uint64_t _write_idx; // 写偏移public:Buffer():_read_idx(0),_write_idx(0),_buffer(BUFFER_SIZE) {}char* begin() {return *_buffer.begin();}// 获取当前写入起始地址char *writePosition() { return begin() _write_idx;}// 获取当前读取起始地址char *readPosition() { return begin() _read_idx; }// 获取缓冲区末尾空间大小 —— 写偏移之后的空闲空间总体大小减去写偏移uint64_t tailIdleSize() {return _buffer.size() - _write_idx; }// 获取缓冲区起始空间大小 —— 读偏移之前的空闲空间uint64_t handIdleSize() {return _read_idx ;}// 获取可读空间大小 写偏移 - 读偏移 uint64_t readAbleSize() {return _write_idx - _read_idx ;} // 将读偏移向后移动void moveReadOffset(uint64_t len) { // 向后移动大小必须小于可读数据大小assert(len readAbleSize());_read_idx len; }// 将写偏移向后移动void moveWriteOffset(uint64_t len) { assert(len tailIdleSize());_write_idx len;}void ensureWriteSpace(uint64_t len) {// 确保可写空间足够 整体空间够了就移动数据否则就扩容 if (tailIdleSize() len) return;// 不够的话 判断加上起始位置够不够,够了将数据移动到起始位置if (len tailIdleSize() handIdleSize()) {uint64_t rsz readAbleSize(); //帮当前数据大小先保存起来std::copy(readPosition(),readPosition() rsz,begin()); // 把可读数据拷贝到起始位置_read_idx 0; // 读归为0_write_idx rsz; // 可读数据大小是写的偏移量}else { // 总体空间不够需要扩容不移动数据直接给写偏移之后扩容足够空间即可_buffer.resize(_write_idx len);}}// 写入数据void Write(const void *data,uint64_t len) {ensureWriteSpace(len);const char *d (const char*) data;std::copy(d,d len,writePosition());}void WriteAndPush(void* data,uint64_t len) {Write(data,len);moveWriteOffset(len);}void WriteStringAndPush(const std::string data) {writeString(data);moveWriteOffset(data.size());}void writeString(const std::string data) {return Write(data.c_str(),data.size());}void writeBuffer(Buffer data) {return Write(data.readPosition(),data.readAbleSize());}void writeBufferAndPush(Buffer data) {writeBuffer(data);moveWriteOffset(data.readAbleSize());}std::string readAsString (uint64_t len) {assert(len readAbleSize());std::string str;str.resize(len);Read(str[0],len);return str;}void Read(void *buf,uint64_t len) {// 读取数据 1. 保证足够的空间 2.拷贝数据进去// 要求获取的大小必须小于可读数据大小assert(len readAbleSize());std::copy(readPosition(),readPosition() len,(char*)buf);}void readAndPop(void *buf,uint64_t len) {Read(buf,len);moveReadOffset(len);}// 逐步调试std::string ReadAsStringAndPop(uint64_t len) {assert(len readAbleSize());std::string str readAsString(len);moveReadOffset(len);return str;}char* FindCRLF() {char *res (char*)memchr(readPosition(),\n,readAbleSize());return res;}// 通常获取一行数据这种情况针对是std::string getLine() {char* pos FindCRLF();if (pos NULL) {return ;}// 1 为了把换行数据取出来return readAsString(pos - readPosition() 1);}std::string getLineAndPop() {std::string str getLine();moveReadOffset(str.size());return str;}void Clear() { // 清空缓冲区clear// 只需要将偏移量归0即可_read_idx 0;_write_idx 0;} };五、进行测试 #include server.hpp using namespace std; // 控制打印信息 #define INF 0 #define DBG 1 #define ERR 2 #define LOG_LEVEL INF#define LOG(level,format,...) do{\if (level LOG_LEVEL) break;\time_t t time(NULL);\struct tm *ltm localtime(t);\char tmp[23] {0};\strftime(tmp,31,%H:%M:%S,ltm);\fprintf(stdout,[%s,%s:%d] format \n,tmp,__FILE__,__LINE__,##__VA_ARGS__);\ }while(0)#define INF_LOG(format, ...) LOG(INF, format, ##__VA_ARGS__) #define DBG_LOG(format, ...) LOG(DBG, format, ##__VA_ARGS__) #define ERR_LOG(format, ...) LOG(ERR, format, ##__VA_ARGS__)int main() {Buffer buf;std::string str hello!;// buf.WriteStringAndPush(str);// Buffer buf1;// buf1.writeBufferAndPush(buf);// std::string tmp;// tmp buf1.ReadAsStringAndPop(buf.readAbleSize());// cout tmp endl;// cout buf.readAbleSize() endl;// cout buf1.readAbleSize() endl;for (int i 0; i 300; i ) {std::string str hello std::to_string(i) \n;buf.WriteStringAndPush(str);}while(buf.readAbleSize() 0) {string line buf.getLineAndPop();LOG(hello); }// string tmp;// tmp buf.ReadAsStringAndPop(buf.readAbleSize());// cout tmp endl;return 0; }中秋快乐
http://www.hkea.cn/news/14388262/

相关文章:

  • 网站品质广告制作公司的营业成本
  • 江阴网站优化公司大企业官网设计
  • 工业网站建设wordpress插件在哪
  • 鞍山公司做网站加工平台调平装置
  • 免费发布信息有哪些网站微信商城开发推荐华网天下
  • 泉州建设系统培训中心网站wordpress wp_term_taxonomy
  • 表白网页制作网站国际军事新闻最新消息中国
  • 网站建设公司经营购物网站有哪些功能
  • 手机版网站开发教学北京公司网站设计电话
  • 全国网站联盟建设公司经营范围
  • 织梦网站迁移上海金山区建设局网站
  • 河北高阳做网站的做技术支持的网站有
  • 河北衡水建设网站公司电话绍兴网站建设推广
  • 政务网站建设及安全刚刚刚刚刚刚好痛
  • 移动网站开发内容php 电子商务网站建设
  • 中职网站建设西安网站策划设计
  • 北京电信备案网站wordpress postmeta表
  • 做鲜花配送网站需要准备什么内网网站建设软件
  • 哔哩哔哩官方网站首页东阳建设公司网站
  • 黄金路网站建设公司查询网站后台地址
  • 大学生创业服务网站建设方案项目书短视频素材网站免费大推荐
  • 无锡网站的优化哪家好珠宝手机网站模板
  • 宣传网站设计有什么网络项目可以做的
  • 南通模板建站多少钱七零三八零四温州论坛
  • 门户网站视频买服饰网站建设
  • 织梦网站如何播放mp4律师事务所网站建设方案
  • 建站之星怎么收费大型网站建设需要
  • 禅城网站建设代理学习网页设计
  • 用电脑做兼职的网站比较好博客网站制作
  • 朝阳企业网站建设方案数据库 搭建 网站