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

深圳做网站de公司优化网站做什么的

深圳做网站de公司,优化网站做什么的,鸣蝉建站平台,外链建设应如何进行文章思路来源 如何实现无锁申请#xff1f; 每个线程申请自己的TreadCacheTLS对象#xff0c;来管理自己的freeList数组。小内存的大小#xff1f; 0-256K#xff0c;并且对申请到的内存进行字节对齐#xff0c;保证申请到的内存可以映射到对应的freeList中。映射规则 每个线程申请自己的TreadCacheTLS对象来管理自己的freeList数组。小内存的大小 0-256K并且对申请到的内存进行字节对齐保证申请到的内存可以映射到对应的freeList中。映射规则 从128字节开始每个区间8倍递增从168到16是两倍字节开始对齐每8倍递增到256KB8K对齐结束。每个区间为1656565624共208个freeList为什么从8字节开始对齐让freeList保存下一个节点的地址即使在64位系统下freeList如何管理内存 将申请到的内存块头插到对应的freeList每次需要内存就头删一个内存块。如何向centralCache申请内存 首先利用相同的哈希值来得到对应的spanList获取到一个span里面存储的是切好size大小的freeList并且物理空间是连续的。然后返回ThreadCache需要的内存块数。如何连续 将申请到的未切分span进行尾插如何向pageCache申请内存 首先将centralCache申请的页数不足一页申请一页映射到对应的spanList上取出一个span并记录span内每个页号和span的映射关系后返回给centralCache。为空则向spanList后遍历如果找到一个span则再创建一个span一个span存所需的页返回给centralCache一个span存剩余的页并将这个span挂到对应spanList内。都为空则向系统申请一个128页的大span重新进行前面的流程。创建两个span一个span返回一个span挂到对应spanList内。为什么双向链表 方便回收span时找到前一个节点项目中有使用new吗 新建了一个定长内存池每次需要对象时从这里面申请并且用的是定位new直接再给定地址内开辟空间内存池只分配内存给对象至于内存如何使用就看对象如何使用比如将void*转换为int*然后修改指向的空间什么时候加锁 centralCache从span中返回内存块时加锁(删除)centralCache将pageCache中的span挂到spanList时加锁增加centralCache合并内存块到span需要加锁合并PageCache寻找可用span时需要加锁删除PageCache合并span时需要加锁合并一般涉及到对数据的增删改操作时需要加锁如何释放内存 ThreadCache释放指向内存空间的指针时会根据指针地址找到页号然后找到对应的span进而知道内存块大小就能找到归还的freeList当归还的内存块等于批量申请的内存块数量后就可以归还这个freeList给span调用centralCache函数找到该freeList的所属的spanList加锁后根据页号和span的关系将freeList归还给spanList内的span解锁后调用PageCache函数PageCache同样利用页号和span的关系进行向前向后合并将合并后的span挂到对应spanList内并在spanList内删掉合并用掉的span页号和地址的可以互相转换只需要将地址除8K得到页号因为每个地址都是以8K递增相应的页号1向前向后合并的条件是span不为空且没有被使用大内存如何申请 计算对齐后需要的页数然后PageCache向系统申请空间建立页号和span的映射后返回该span利用span的页号左移13位得到指针地址并返回。释放该内存则直接释放给系统而不是还给内存池。链表的头节点如何连接 头几个字节并且为了适配不同平台将一级指针强转为二级指针再取其地址。改进的点 使用RAII机制管理锁加入日志线程freeListspanList freeList记录申请内存块数批量申请的数量spanList记录span的头节点span记录页号、页数、前后指针、切好的size大小、使用掉的内存块数、是否在使用慢开始机制 申请块数以1递增直到当前申请的内存块数大于最大可申请数亮点/细节 慢开始机制基数树为了保证连续进行尾插使用定长内存池模板每次创建list的头节点都从里面申请 ConcurrentAlloc首先当线程需要size个字节时会从定长内存池中先加锁创建tls线程缓存对象Allocate将size进行字节对齐并计算key找到对应的freeList从该freeList中无锁的获取头部的内存块哈希桶用每个定长内存块的头部来作为链表下一个节点的地址 哈希桶的映射规则是 0-128以8字节对齐分为0-15 129-1K以16字节对齐分为16-71 1K1-8K以128字节对齐分为72-127 8K1-64K以1024字节对齐分为128-183 64K1-256K以8K对齐分为184-207FetchFromCentralCache如果对应freeList为空则向中间缓存利用慢开始机制申请一定数量的内存块FetchRangeObj首先中间缓存根据相同的key来找对应的spanList内部存储切好size大小的freeList每个span大小为8K内包含一定数量的size内存块然后加锁从桶内的一个span获取头删需要的内存块数线程缓存得到中间缓存分配的内存块后将第一个内存块分给线程将剩余的内存块头插到freeList里。GetOneSpan如果中间缓存的当前span哈希桶为空首先把中间缓存锁解锁用以防止其他线程释放内存时需要等待然后加上页锁向页缓存申请空间NewSpan页缓存保存的是管理页的spanList它的映射规则是直接定址法每个key保存的都是key个页的span。 中间缓存需要申请k个页时映射到对应spanList上取出一个span建立页号和span的映射返回给中间缓存如果对应spanList没有span就遍历k之后的spanList有则切分k个并将剩余的span头插到对应的spanList上建立页号和span的映射返回这个span。如果k之后的spanList都为空则从定长内存池新建一个span对象为其分配128页连续的内存空间然后重新切分k头插剩余的span到对应spanList内映射返回这个span。GetOneSpan中间缓存拿到span后解锁页缓存锁将span划分为size大小的内存块保持物理空间连续将切好的span加锁后头插到对应spanList内从span内获取n个对象返回给线程缓存线程缓存在返回一个对象给线程并把剩下的对象头插到对应freeList内。 释放内存 MapObjectToSpan计算指针地址到span的映射获取内存块的大小 Deallocate根据内存块的大小归还到相应freeList内当其内的内存块数量大于分配的数量后 分配的数量有慢开始机制计算每次申请就递加一个机制 ListTooLong就把这些归还给centralCache ReleaseListToSpans根据相同的key找到spanList后加锁后根据映射关系将内存块归还给span里的freeList直到所有内存块归还完毕后就将这个span归还给pageCache解锁 ReleaseSpanToPageCache加锁首先看 向前能否合并根据前一个span的页号找到前一个span判断是否为空是否正在被使用是则无法合并 然后向前合并页号以及页数并把前一个span对应的spanList删除并且回收前一个span的空间循环上述判断直到退出向后能否合并根据后一个span的页号span页数后一个找到对应span进行向后合并直到不满足后一个span不为空未使用。将合并后的span挂到指定位置并建立页号和span的映射关系重复则覆盖解锁
http://www.yayakq.cn/news/1064/

相关文章:

  • 建设教育网站法律网站的建设流程
  • app网站建设宣传方案怎么查网站建设时间
  • 八宝山做网站的公司家装公司十大口碑排名
  • 建设网站有哪些步骤网站空间查询
  • 合肥网站制作方案凡科互动答题辅助
  • 深圳网站设计九曲网站建设毕业设计网站开发流程
  • 网站建设依据标题设计网站
  • 企业网站设计服务90设计网怎么样
  • 上海智能模板建站泉州人才网
  • 什么软件做网站链接自己做的网站提示不安全
  • 建设网站用什么代码写好呢齐鲁人才网
  • 用asp.net 做网站怎么查域名注册商
  • 徐州市城乡建设局门户网站自己能不能做个网站
  • 建设一个网站的一般过程网站建设奖项
  • 云服务器网站搭建教程菏泽炫佑网站建设
  • 南京工大建设工程技术有限公司网站免费建工作室网站
  • 青岛 公司 网站建设成都响应式网站建设
  • 网站模板哪个好网站建设费能入长期待摊吗
  • 简述网站开发的步骤网站建设公司的那些坑
  • 网站广告图做多大工信部网站备案号查询
  • asp个人网站怎么建设标志设计论文
  • 儿童摄影网站设计网站做多久流量
  • 贵阳网站页面设计西地那非是什么药
  • 哪个网站可以学做蛋糕wordpress镜像下载
  • 网站建设前期应该做哪些准备网站建设 知识产权
  • 做网站推广需要什么空间免费浏览量100
  • 网站seo优化推广九江seo优化
  • 合肥网站建设哪个公司做得比较好东川网站制作
  • wordpress开启多站点模式thinkphp做网站后台
  • 迪庆北京网站建设网页设计外文文献