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

网站建设实验报告手写渗透wordpress

网站建设实验报告手写,渗透wordpress,宁波网红打卡地,公司网站怎么更新需要怎么做目录 为什么需要缓冲区自动增长的缓冲区buffer数据结构buffer类 写详细比较费时间,就简单总结下。 总结自Linux 多线程服务端编程:使用 muduo C 网络库 Muduo网络编程: IO-multiplexnon-blocking 为什么需要缓冲区 Non-blocking IO 的核心…

目录

  • 为什么需要缓冲区
  • 自动增长的缓冲区
  • buffer数据结构
    • buffer类

写详细比较费时间,就简单总结下。

总结自Linux 多线程服务端编程:使用 muduo C++ 网络库

Muduo网络编程:
IO-multiplex+non-blocking

为什么需要缓冲区

Non-blocking IO 的核心思想是避免阻塞在 read() 或 write() 或其他 IO 系统调
用上,所以应用层的缓冲是必须的,每个 TCP socket 都要有 input buffer
和 output buffer。

自动增长的缓冲区

一方面希望减少系统调用,所以缓冲区越大越好
另一方面希望减少内存占用,如果缓冲区很大而连接很多,将会占用大量内存空间。而大多数时候缓冲区的使用率又很低。

buffer数据结构

在这里插入图片描述

buffer类

Muduo Buffer的size()是自适应的,一开始的初始值是1k。

抽取相关代码:

class Buffer:public muduo::copyable{public:static const size_t kCheapPrepend = 8;static const size_t kInitialSize = 1024;explicit Buffer(size_t initialSize = kInitialSize): buffer_(kCheapPrepend + initialSize),readerIndex_(kCheapPrepend),writerIndex_(kCheapPrepend){...}...std::vector<char> buffer_;
}

vector数组,保证了可以扩展,初始化了1k可用空间,并在头部预留了1Byte。

具体做法是,在栈上准备一个 65536 字节的 extrabuf,然后利用 readv() 来读取数据。
iovec 有两块,第一块指向muduo Buffer 中的 writable 字节,另一块指向 栈上的 stackbuf。
这样如果读入的数据不多,那么全部都读到Buffer 中去了;如果长度超过 Buffer 的 writable 字节数,就会读到栈上的 extrabuf 里,然后程序再把extrabuf 里的数据 append 到 Buffer 中。

这么做利用了临时栈上空间,避免开巨大 Buffer 造成的内存浪费,也避免反复 调用 read() 的系统开销(通常一次 readv()系统调用就能读完全部数据)。

代码相关实现:Buffer::readFd()

ssize_t Buffer::readFd(int fd, int* savedErrno)
{// saved an ioctl()/FIONREAD call to tell how much to readchar extrabuf[65536];struct iovec vec[2];const size_t writable = writableBytes();vec[0].iov_base = begin()+writerIndex_;vec[0].iov_len = writable;vec[1].iov_base = extrabuf;vec[1].iov_len = sizeof extrabuf;// when there is enough space in this buffer, don't read into extrabuf.// when extrabuf is used, we read 128k-1 bytes at most.const int iovcnt = (writable < sizeof extrabuf) ? 2 : 1;const ssize_t n = sockets::readv(fd, vec, iovcnt);if (n < 0){*savedErrno = errno;}else if (implicit_cast<size_t>(n) <= writable){writerIndex_ += n;}else{writerIndex_ = buffer_.size();append(extrabuf, n - writable);}return n;
}

首先写buffer,写不下的写extrabuf,然后把extrabuf的写入buffer,具体函数是append。

  void append(const char* /*restrict*/ data, size_t len){ensureWritableBytes(len);std::copy(data, data+len, beginWrite());hasWritten(len);}

ensureWritableBytes检查buffer是否有空余空间可以被写入,没有就vector.resize(len),扩展len。然后通过std::copy,把extrabuf上的内存copy到buffer上。最后更新writerIndex_。

http://www.yayakq.cn/news/295884/

相关文章:

  • 定制头像的网站泰安seo网络公司
  • 镇江网站制作教程汽车网站策划
  • 怎么把网站做10万ipwordpress 怎么安装
  • 汕头百度网站推广简单网页制作代码html
  • 衡水网站建设最新报价做网站前台模板
  • 江门网页模板建站成都市城乡建设厅官方网站
  • 医院网站建设方案策划书wordpress js代码放哪
  • 做视频开头的外国网站网站建设自学视频
  • 个人 网站备案 幕布南通网站排名外包
  • 哈尔滨网站建设论坛北京梦创义网站建设
  • 成都有没有做网站建设的网站建设超链接字体变色代码
  • 怎么在网站后面做链接东莞市专注网站建设平台
  • 简约门户网站源码无锡营销型网站建站
  • 网站栏目排序图怪兽作图神器下载
  • 郑州网站制作公司名单中联建设集团股份有限公司网站
  • Wordpress垂直类目站模版徐州市制作网站的公司
  • 做内贸的什么网站效果好惠州网站制作询问薇
  • 韶关企业网站建设公司创建网站的英语
  • 上海住房与建设部网站网站开发服务费会计分录
  • 国外做ppt网站php网站建设步骤
  • 网站入口门户宁波网络营销策划公司
  • 顺企网上海网站建设前端毕业设计题目可以做哪些
  • 莱芜哪里做网站成都网站工作室
  • 手机怎么做网站教程检测一个网站用什么软件做的方法
  • 如何做网站企划案十大拿货网站
  • 大连网站设计策划哪位大神推荐一下好网站
  • 网站宣传的劣势杭州企业建站程序
  • 东莞做网站seo优化好的外贸网站的特征
  • 吴江城乡住房和城乡建设局网站cms做企业网站6
  • 网站开发工程师 酷社群电商平台排名