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

网站建设怎样中英文门户网站简介

网站建设怎样中英文,门户网站简介,网站你懂我意思正能量免费软件,湘潭网站建设口碑好磐石网络1.并发内存池concurrent memory pool 组成部分 thread cache、central cache、page cache thread cache#xff1a;线程缓存是每个线程独有的#xff0c;用于小于64k的内存的分配#xff0c;线程从这里申请内存不需要加锁#xff0c;每个线程独享一个cache#xff0c;这…1.并发内存池concurrent memory pool 组成部分 thread cache、central cache、page cache thread cache线程缓存是每个线程独有的用于小于64k的内存的分配线程从这里申请内存不需要加锁每个线程独享一个cache这也就是这个并发线程池高效的地方。central cache中心缓存是所有线程所共享thread cache是按需从central cache中获取的对象。central cache周期性的回收thread cache中的对象避免一个线程占用了太多的内存而其他线程的内存吃紧。达到内存分配在多个线程中更均衡的按需调度的目的。central cache是存在竞争的所以从这里取内存对象是需要加锁但只会在两个及以上thread cache同时内存不够时才会发生竞争。page cache页缓存是在central cache缓存上面的一层缓存存储的内存是以页为单位存储及分配的central cache没有内存对象时从page cache分配出一定数量的page并切割成定长大小的小块内存分配给central cache。page cache会回收central cache满足条件的span对象并且合并相邻的页组成更大的页缓解内存碎片的问题。 2.thread cache thread cache是哈希桶结构每个桶是一个按桶位置映射大小的内存块对象的自由链表即每一个桶都是一个定长内存池。C项目——高并发内存池1--介绍及定长内存池_Gosolo的博客-CSDN博客 每个线程都有一个thread cache对象所以每个线程在这里获取对象和释放对象是无锁的。   既然是哈希桶那映射关系如何确定呢 2.1 计算对象大小的对齐映射规则 首先进行内存拆分每个thread cache总共享有64kb的缓存池 [1,128] 8byte对齐 freelist[0,16) [1281,1024] 16byte对齐 freelist[16,72) [10241,8*1024] 128byte对齐 freelist[72,128) [8*10241,64*1024] 1024byte对齐 freelist[128,184) [64*10241,256*1024] 8*1024byte对齐 freelist[184,208) 这个不是给thread cache用的 那也就是说根据我申请空间的大小不同我们使用不同的桶来给予内存。 申请空间在[1,128]我们8个字节8个字节的给。 申请空间在[1281,1024]16个字节16个字节的给。 所以当申请内存时需要计算给他几个内存小块即对齐数。 2.1.1 确认分配的内存空间 class SizeClass { public: //按照申请的内存大小 决定分配多少对齐数整数倍的内存空间static size_t _RoundUp(size_t size, size_t alignNum){size_t alignSize;if (size % alignNum ! 0){alignSize (size / alignNum 1)*alignNum;}else{alignSize size;}return alignSize;}static inline size_t RoundUp(size_t size){if (size 128){return _RoundUp(size, 8);}else if (size 1024){return _RoundUp(size, 16);}else if (size 8 * 1024){return _RoundUp(size, 128);}else if (size 64 * 1024){return _RoundUp(size, 1024);}else if (size 256 * 1024){return _RoundUp(size, 8 * 1024);}else{assert(false);return -1;}} }; 更好的一种写法 static inline size_t _RoundUp(size_t bytes, size_t alignNum){return ((bytes alignNum - 1) ~(alignNum - 1));}2.1.2 确定哈希桶编号 简单写法 size_t _Index(size_t bytes, size_t alignNum){//假如需要8字节 那他在下标为0的桶if (bytes % alignNum 0){return bytes / alignNum - 1;}else//假如需要8字节 那他在下标为0的桶{ return bytes / alignNum;}} 利用位运算的高效方法 class SizeClass { public:static inline size_t _Index(size_t bytes, size_t align_shift){return ((bytes (1 align_shift) - 1) align_shift) - 1;}// 计算映射的哪一个自由链表桶static inline size_t Index(size_t bytes){assert(bytes MAX_BYTES);// 每个区间有多少个链static int group_array[4] { 16, 56, 56, 56 };if (bytes 128){return _Index(bytes, 3);}else if (bytes 1024){return _Index(bytes - 128, 4) group_array[0];}else if (bytes 8 * 1024){return _Index(bytes - 1024, 7) group_array[1] group_array[0];}else if (bytes 64 * 1024){return _Index(bytes - 8 * 1024, 10) group_array[2] group_array[1] group_array[0];}else if (bytes 256 * 1024){return _Index(bytes - 64 * 1024, 13) group_array[3] group_array[2] group_array[1] group_array[0];}else{assert(false);}return -1;}}; 2.2 thread cache框架 class ThreadCache { public:// 申请和释放内存对象void* Allocate(size_t size);void Deallocate(void* ptr, size_t size);/************************************本文先实现申请和释放对象************************************/// 从中心缓存获取对象void* FetchFromCentralCache(size_t index, size_t size);// 释放对象时链表过长时回收内存回到中心缓存void ListTooLong(FreeList* list, size_t size); private:FreeList _freeLists[NFREELISTS]; }; /*TLS thread lcoal storage 为了使线程从thread cache 里申请内存不加锁 就需要一个仅自己可见其他线程不可见的变量存储方式 */ static _declspec(thread) ThreadCache* pTLSThreadCache nullptr; 2.2.1 TLS TLS介绍转载自 Thread Local Storage_evilswords的博客-CSDN博客 Instance(单件)机制原本是让代码执行时只有一个实例但有的时候又希望每个线程各自能有自己的单件相互不影响处理类似的需求最先想到的就是全局表然后按线程id或是管理线程的key索引到对应的单件上取全局表的时候需要加锁。 虽然这样也能实现目的但是代码看上去很不自然。最近发现还是有更自然的方法能实现这一点就是 TLS 线程本地存储。 static void* ConcurrentAlloc(size_t size) {// 通过TLS 每个线程无锁的获取自己的专属的ThreadCache对象if (pTLSThreadCache nullptr){pTLSThreadCache new ThreadCache;}cout std::this_thread::get_id() : pTLSThreadCache endl;return pTLSThreadCache-Allocate(size); }static void ConcurrentFree(void* ptr, size_t size) {assert(pTLSThreadCache);pTLSThreadCache-Deallocate(ptr, size); }2.2.2 thread cache具体实现 void* ThreadCache::Allocate(size_t size) {assert(size MAX_BYTES);size_t alignSize SizeClass::RoundUp(size);size_t index SizeClass::Index(size);if (!_freeLists[index].Empty()){return _freeLists[index].Pop();}else{return FetchFromCentralCache(index, alignSize);} } void ThreadCache::Deallocate(void* ptr, size_t size) {assert(ptr);assert(size MAX_BYTES);size_t index SizeClass::Index(size);_freeLists[index].Push(ptr);} 2.2.3 流程图
http://www.dnsts.com.cn/news/105407.html

相关文章:

  • 做网站推广有用吗wordpress网站显示不全
  • 无锡响应式网站建设synology wordpress
  • 哪些网站可以做企业推广文件夹里内容做网站的分类
  • 服务器上的php4.0网站连接sql2005服务器连接不上网站费用怎么做分录
  • 站长工具国产专业做简历用什么软件
  • 手机网站域名注册荆州网站seo
  • 怎么查网站的关键词排名山东房地产新闻
  • 电商网站建设开题报告玻璃制品东莞网站建设
  • 哪个公司网站做的最好17做网站郑州
  • 站群推广有用的网站地址
  • 江门建站网站模板网站的类型
  • 长沙高端网站制作公司电子商务网站与建设实践报告
  • 外贸公司网站怎么做室内设计素材网站推荐
  • 网站设计 术语郑州中原区网站建设
  • 道滘做网站全球设计网络芯片的公司
  • 铁岭手机网站建设红花岗区住房和城乡建设局网站
  • 购物网站的后台做哪些东西如何做电影网站
  • 个人网站的基本风格手机制作视频
  • 一级域名做网站的好处义乌网站建设开发
  • 做网站接私活移动电子商务网站建设研究
  • 定制网站建设价格湖南电商平台网站建设
  • flash网站代码网站开发实用技术第2版
  • 安徽省住房城乡建设厅网站电工搜索公司信息的网站
  • 二次元动漫网站设计方案网站建设SEO优化哪家好
  • 昌乐建设局网站网络系统架构
  • 兼职网站的建设目标怎么写网站模板 可做采集站
  • 宁乡网站开发公司推荐贵溪市城乡建设局网站
  • 烟台市铁路建设管理局网站石家庄抖音seo公司
  • 原创文章对网站的好处中国十大公关公司排名
  • 网站中间内容做多大尺寸的红帽linux安装wordpress