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

视频网站策划秦皇岛市保障性住房官网

视频网站策划,秦皇岛市保障性住房官网,快云服务器怎么做网站,静态网页设计作品欣赏目录 为什么需要缓冲区自动增长的缓冲区buffer数据结构buffer类 写详细比较费时间#xff0c;就简单总结下。 总结自Linux 多线程服务端编程#xff1a;使用 muduo C 网络库 Muduo网络编程#xff1a; IO-multiplexnon-blocking 为什么需要缓冲区 Non-blocking IO 的核心… 目录 为什么需要缓冲区自动增长的缓冲区buffer数据结构buffer类 写详细比较费时间就简单总结下。 总结自Linux 多线程服务端编程使用 muduo C 网络库 Muduo网络编程 IO-multiplexnon-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::vectorchar 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, dont 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_castsize_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, datalen, beginWrite());hasWritten(len);}ensureWritableBytes检查buffer是否有空余空间可以被写入没有就vector.resize(len)扩展len。然后通过std::copy把extrabuf上的内存copy到buffer上。最后更新writerIndex_。
http://www.hkea.cn/news/14443871/

相关文章:

  • 网站建设合同属于什么税目ppt模板免费下载千图网
  • 快手网站题怎么做网站备案哪个部门
  • 分宜网站建设网站设计费用
  • 网站开发济南百度推广培训
  • 网站更改文章标题微信微网站开发报价
  • 中国新闻社官方网站有什么做C语言的网站
  • 浙江同安建设有限公司网站网站建设费怎么写分录
  • 自己做的美食分享到网站深圳产品设计招聘信息
  • 网站改版说明美发企业网站模板
  • 中标公告 网站建设智能小程序是什么
  • 建站宝盒怎么样惠州seo代理计费
  • 物价局网站建设情况汇报有没有网站
  • 桂林公司做网站北洼路网站建设
  • 淘宝建站服务在线看视频网站怎么做
  • 网站制作报价单西安网络推广seo0515
  • 北京网站建设策划解决方案南昌 网站 公司
  • 苏宁电器网站建设特点分析做淘宝客网站用什么程序好
  • 洛杉矶网站建设网络加速器有哪些
  • 网站可以做的活动推广聊城正规网站建设公司电话
  • 滨江区高端网站建设网页设计公司哪家值得推荐
  • 网站SEO的评价wordpress 更换路径
  • 屏蔽蜘蛛抓取 对网站有什么影响网络课程网站模板
  • 杭州论坛网站制作广告优化
  • 网站模板安装教程网站建设公司 知乎
  • 企业手机网站建设案例织梦网站专题页面如何做
  • 专业制作网站哪家好零基础怎么开网店
  • 第一次做网站中文网站做google广告怎么样
  • 计算机毕业设计代做网站263个人邮箱入口登录网页
  • 户户通行业网站注册个小公司要交税吗
  • 网站备案链接直接查看北京网站优化排名推广