摘要:
需求: 准入授权配置文件有时候分了好几个维度进行配置,例如 company|product|sys这种格式的配置:1.配置 "sina|weibo|pusher" 表示 sina公司weibo产品pusher系统能够准入,而"sina|weibo|sign"不允许准入2.配置 "sina|*|pu... 阅读全文
摘要:
在MongoDB源码概述——内存管理和存储引擎一文的最后,我们留下了一个问题,在使用MongoDB的内存管理与存储引擎时,因为其依仗操作系统的MMAP方式,将磁盘上的文件映射到进程的内存空间,这给MongoDB带来了极大的便利,可也给我们带来了不小的问题。到底隔多久一次将映射的在内存的视图持久化... 阅读全文
摘要:
数据存储: 之前在介绍Journal的时候有说到为什么MongoDB会先把数据放入内存,而不是直接持久化到数据库存储文件,这与MongoDB对数据库记录文件的存储管理操作有关。MongoDB采用操作系统底层提供的内存文件映射(MMap)的方式来实现对数据库记录文件的访问,MMAP可以把磁盘文件的全... 阅读全文
摘要:
假若我们定义了Str类如下结构class Str{ public: Str(int n) Str(const char* p) .....}可以使用如下方式来构建一个对象 Str c(12); Str d=Str(20); Str *z=new Str... 阅读全文
摘要:
由来:最近一直在想怎么高效率的在IO线程接收到数据时通知逻辑线程(基于线程池)工作的问题,像网络编程的服务器模型的一些模型都需要用到这个实现,下面我这里简单的罗列一个多线程的网络服务器模型半同步/半异步(half-sync/half-async):许多餐厅使用半同步/半异步模式的变体。例如,餐厅常常... 阅读全文
摘要:
内容:本文将介绍几种常用的内存池技术的实现,这是我最近学习各大开源的内存池技术遗留下来的笔记,其主要内容包括:STL内存池以及类STL内存池实现Memcached内存池实现固定规格内存池实现Nginx内存池实现一.类STL的内存池实现方式SGI STL的内存池分为一级配置器和二级配置器,一级配置器主... 阅读全文
摘要:
问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕竟我们向系统申请的内存都是通过它完成了,不了解他,也就不能彻底的优化内存占用。来个小例子//g++... 阅读全文
摘要:
问题: 如何增量同步文件,例如一个文本文件有10M,分别存放在A,B两个地方,现在两个文件是完全一样的,但是我马上要在A上对这个文件进行修改,B如何实现自动和A上的文件保持一致,并且网络的传输量最少。 应用场景: 这样的使用场景太多,这里随便列举几个 1.A机器为线上运营的机器,现在需要一台备份的机 阅读全文
摘要:
最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使用场景讨论如何正确的终止正在运行的子线程。其实本文更确切的说是解决如何从待终止线程外部安全的终止... 阅读全文
摘要:
在启动MongoDB后,程序会对相应的参数,上次遗留的锁文件,日志文件等等进行相应的处理,同时也会开启一些支撑其他部分运行的服务线程,为了精读MongoDB的代码,领会其全局设计理念,所以我对这些不是特别核心的部分,也通过博文给自己来做一个总结,方便自己以后查阅。 程序在mian函数里进行了对输入参数的所有处理,程序使用Boost库实现了跨平台的命令行参数的兼容性,这部分的代码非常庞大,也非常的乱,所以也没有必要太过记载,在main函数的底部进行了initAndListen(cmdLine.port, appsrvPath);调用,这个函数就是我们的重点部分。 在void _... 阅读全文
摘要:
本篇文章主要介绍MongoDB的日志模块以及数据持久化存储模块的代码实现方式。大家也许会惊讶,为什么日志模块和持久化存储模块会放到一篇文章来总结。嘿嘿,在别的系统,可能这两个模块联系不是特别大,可是这MongoDB ,这两个模块还真不能分开来讲。这是怎么回事呢?请听我娓娓道来…通常说来,MongoDB具有三个日志模块,LogJournalOplog Log: 位于 log.h,它主要负责用户日志文件,这和我们普通系统的日志系统没有什么区别,作用也就是记录系统的一些重要流程,然后持久化到log文件。这个log文件可以通过系统启动参数"--logpath". Journal: 阅读全文
摘要:
在一个数组中。若你需要频繁的计算一段区间内的和,你会怎么做?,最最简单的方法就是每次进行计算,但是这需要O(N)的时间复杂度,如这个需求非常的频繁,那么这个操作就会占用大量的CPU时间,进一步想一想,你有可能会想到使用空间换取时间的方法,把每一段区间的值一次记录下来,然后存储在内存中,将时间复杂度降... 阅读全文
摘要:
目标:大家可以设想这样一个情景,公司已经部署信息化,且很多办公流程已经挪到线上正在运营的系统来解决,这带给企业的员工非常大的便利,节省办公时间,提高办公效率,可是我们把所有的流程和数据都放到了公司服务器,一旦离开了公司,我们就相当于和我们所有的办公环境脱离了,不再可以查看公司系统上的运营数据,不再可... 阅读全文
摘要:
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。分治法解题的一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的... 阅读全文
摘要:
疑问:基于.net平台能开发操作系统吗?那.net framework怎么办?别急,慢慢讲解… 不知道园子里面有多少人对开发操作系统比较感兴趣,我本人对开发操作系统是非常感兴趣的,记得以前在学校里面用汇编写代码来引导计算机启动等等,现在编写一个属于自己的操作系统,你不需要在写繁杂的汇编,甚至于都不用... 阅读全文