Quantcast
Channel: 大CC »大CC
Browsing index pages (13 articles)
↧

多线程和多进程模型的选用

多线程和多进程模型的选用 这里的线程指通过linux的pthread_create而产生的原生线程,线程资源很宝贵,能被操作系统的任务调度器看见的(不是python gevent、go gorouine里的概念); 我们讨论以下两种模型; 多进程单线程模型(以下简称为多进程); 单进程多线程模型(以下简称为多线程); 多进程模型 优点 编程相对容易;通常不需要考虑锁和同步资源的问题。...

View Article


异步和非阻塞

异步和非阻塞 今天看了篇知乎讨论,将异步和非阻塞讲的透彻;在这里整理出来; 同步异步 同步和异步关注的是 消息通信机制 同步,就是在发出一个 调用 时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 换句话说,就是由调用者主动等待这个调用的结果。...

View Article


C++11带来的优雅语法

C++11带来的优雅语法 自动类型推导 auto auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以简化我们的编程工作; auto是在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响; 另外,似乎auto也并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。 auto a; //...

View Article

C++11在时空性能方面的改进

C++11在时空性能方面的改进 这篇我们聊聊C++11在时间和空间上的改进点; 主要包括以下方面: 新增的高效容器:array、forward_list以及unordered containers; 以及常量表达式、静态断言和move语义; 大小固定容器 array std::array是一个支持随机访问且大小(size)固定的容器,它是c++11中新增的容器。它有如下特点:...

View Article

C++11中对类(class)新增的特性

C++11中对类(class)新增的特性 default/delete 控制默认函数 在我们没有显式定义类的复制构造函数和赋值操作符的情况下,编译器会为我们生成默认的这两个函数: 默认的赋值函数以内存复制的形式完成对象的复制。 这种机制可以为我们节省很多编写复制构造函数和赋值操作符的时间,但是在某些情况下,比如我们不希望对象被复制,...

View Article


当优化扩展到多核时

当优化扩展到多核时 "软件开发没有银弹,我们能做的就是选择和平衡;" 上一篇文章我们聊了在单线程下程序优化的5个方向(ref:《程序优化的5个方向》);当单核优化到极值后,就到了多任务的情况; 想起来很清晰,单个任务分解成多个任务,让多个cpu同时来工作,并行执行,效率自然就上去了; 但,未必就这么简单; 任务分解的粒度...

View Article

程序优化的5个方向

程序优化的5个方向 80/20法则:程序执行中,80%的时间消耗在20%的代码上。 优化前,我们首先得找到这20%的关键路径; 各种语言都有专门的工具来找到这20%的关键路径,比如C++经常用到的gprof; 参考《C++的性能优化实践》 在关键路径上对耗时的计算进行优化; 主要的优化方向为: 减少重复计算、预先计算、延后计算、降低计算代价、不计算; 减少重复计算...

View Article

消除临时对象

消除临时对象 在我们的代码中,有些临时对象正在使用而我们并未察觉; 性能优化时,消除临时对象,特别是大的临时对象,对提升性能效果明显; 这里列出常见的临时对象产生的地方: 按值返回 按值返回函数结果,结果就是一个临时对象 string add(string s1,string s2) { string s3; s3 = s1+s2; return s3; } 解决方案:...

View Article


清楚利弊,用好内联

清楚利弊,用好内联 内联的语法 在类声明中定义方法; 内联方法放在类声明之外,但必须出现在头文件中,且内联方法声明中使用inline标识; 注:inline只是对编译器的建议,是否内联的决定权在编译器; 内联节省的开销 函数调用开销 调用间优化 优秀的编译器可是内联方法的边界难以区分(将代码内联后,对代码进行重新排列) 内联带来的问题 代码膨胀(空间开销) 由于代码膨胀带来的页面缓存命中率下降...

View Article


Redis数据导入工具优化过程总结

Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中; 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻辑处理, 并添加索引(redis集合); 工具完成后,性能是个瓶颈; 优化效果 使用了2个样本数据测试: 样本数据a表8763 条记录; b表940279 条记录; 优化前,a表耗时11.417s;...

View Article

STL区间成员函数及区间算法总结

STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法; 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间成员函数不适用的情况下也应该使用区间算法,至少,相比手写循环而言,它更加简单,有效,并且不容易出错; 区间成员函数 区间构造 标准容器都支持区间构造函数:...

View Article

高效的使用STL

高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍; 熟悉以下条款,高效的使用STL; 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制;...

View Article

常用的STL查找算法

常用的STL查找算法 《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法; 查找有三种,即点线面: 点就是查找目标为单个元素; 线就是查找目标为区间; 面就是查找目标为集合; 针对每个类别的查找,默认的比较函数是相等,为了满足更丰富的需求,算法也都提供了自定义比较函数的版本; 单个元素查找 find() 比较条件为相等的查找...

View Article

Browsing index pages (13 articles)


Latest Images