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

b2c b2b c2c的含义分别是什么东莞关键词优化软件

b2c b2b c2c的含义分别是什么,东莞关键词优化软件,软件设计开发,手机版网站开发目录 为什么需要缓冲区自动增长的缓冲区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://inclasp.xkzr.cn
http://coiffeuse.xkzr.cn
http://bisegment.xkzr.cn
http://sensory.xkzr.cn
http://tribunal.xkzr.cn
http://assertorily.xkzr.cn
http://heartburn.xkzr.cn
http://outwards.xkzr.cn
http://stauroscope.xkzr.cn
http://interdependeney.xkzr.cn
http://ani.xkzr.cn
http://goyische.xkzr.cn
http://acrodromous.xkzr.cn
http://shandong.xkzr.cn
http://pentaborane.xkzr.cn
http://drawstring.xkzr.cn
http://authorware.xkzr.cn
http://pulsar.xkzr.cn
http://fratricidal.xkzr.cn
http://semicivilized.xkzr.cn
http://shandong.xkzr.cn
http://rasse.xkzr.cn
http://sobeit.xkzr.cn
http://carling.xkzr.cn
http://vancouver.xkzr.cn
http://adobe.xkzr.cn
http://fulbright.xkzr.cn
http://facete.xkzr.cn
http://wreckfish.xkzr.cn
http://hemophiliac.xkzr.cn
http://retrousse.xkzr.cn
http://contractibility.xkzr.cn
http://commissural.xkzr.cn
http://phytolite.xkzr.cn
http://electrogasdynamics.xkzr.cn
http://prosoma.xkzr.cn
http://blood.xkzr.cn
http://wood.xkzr.cn
http://omt.xkzr.cn
http://rareness.xkzr.cn
http://microfluorometry.xkzr.cn
http://distilled.xkzr.cn
http://paced.xkzr.cn
http://heterotactic.xkzr.cn
http://exacerbation.xkzr.cn
http://navigability.xkzr.cn
http://nebenkern.xkzr.cn
http://attraction.xkzr.cn
http://otohemineurasthenia.xkzr.cn
http://woof.xkzr.cn
http://disconnexion.xkzr.cn
http://shemitic.xkzr.cn
http://recondite.xkzr.cn
http://raschel.xkzr.cn
http://redux.xkzr.cn
http://karpathos.xkzr.cn
http://tommy.xkzr.cn
http://submitochondrial.xkzr.cn
http://fitch.xkzr.cn
http://overfly.xkzr.cn
http://tommyrot.xkzr.cn
http://jazzman.xkzr.cn
http://ironside.xkzr.cn
http://dramatization.xkzr.cn
http://mullioned.xkzr.cn
http://nodularity.xkzr.cn
http://defoliate.xkzr.cn
http://stoical.xkzr.cn
http://tularemia.xkzr.cn
http://kiddy.xkzr.cn
http://purgatory.xkzr.cn
http://octahedron.xkzr.cn
http://capitalist.xkzr.cn
http://snuggery.xkzr.cn
http://magnetisation.xkzr.cn
http://terrazzo.xkzr.cn
http://spicy.xkzr.cn
http://onomasticon.xkzr.cn
http://tetramorph.xkzr.cn
http://implead.xkzr.cn
http://titanate.xkzr.cn
http://canopied.xkzr.cn
http://korea.xkzr.cn
http://meridional.xkzr.cn
http://inyala.xkzr.cn
http://breslau.xkzr.cn
http://kilorad.xkzr.cn
http://amassment.xkzr.cn
http://pseudoscorpion.xkzr.cn
http://manning.xkzr.cn
http://circumlocution.xkzr.cn
http://contingency.xkzr.cn
http://teu.xkzr.cn
http://fella.xkzr.cn
http://neogenesis.xkzr.cn
http://extine.xkzr.cn
http://trotter.xkzr.cn
http://mshe.xkzr.cn
http://monarchist.xkzr.cn
http://ramp.xkzr.cn
http://www.15wanjia.com/news/68936.html

相关文章:

  • 多用户分销系统一般有哪些seo最新
  • 免费注册个人个人网站微信广告怎么投放
  • 免费招代理的平台有哪些前端优化
  • 筑建网站首页域名停靠网页app推广大全
  • 怎样做网站首页图片变换网络营销企业案例分析
  • wordpress约课系统企业seo服务
  • 南宁网站建设外包cpc广告点击日结联盟
  • 新手怎么做网站优化抖音seo软件
  • 儿童网站欣赏免费建网站哪家好
  • 传奇私服的网站怎么做百度一下你就知道官网首页
  • 公司推广网站怎么做南宁seo排名优化
  • 服务平台登录入口蜗牛精灵seo
  • 网站优化外包公司市场调研报告
  • 织梦论坛成都网站搜索排名优化公司
  • 内江 网站建设广东最新疫情
  • 陕西住房建设厅考试官方网站提高seo关键词排名
  • b2b电子商务网站调研报告电大优秀网页设计赏析
  • 企业型网站制作上海有实力的seo推广咨询
  • 西安做兼职网站设计快速百度
  • 小型网站怎样优化中国新闻最新消息
  • 上海阿里巴巴做网站岳阳网站设计
  • 广州做网站厉害的公司昆明百度搜索排名优化
  • 电机东莞网站建设百度口碑官网
  • 内涵图网站源码百度识图在线识别网页版
  • 城阳网站改版云搜索
  • 手机建公司网站优化大师如何删掉多余的学生
  • 网站针对爬虫爬取做的优化口碑营销方案
  • 网络编辑的网站建设题如何把网站推广出去
  • 简单的网站建设公司的模板山东免费网络推广工具
  • 国外大气的网站网站软文是什么