2014年2月21日

(原创)用c++11打造好用的variant(更新)

摘要: 关于variant的实现参考我前面的博文,不过这第一个版本还不够完善,主要有这几个问题:内部的缓冲区是原始的char[],没有考虑内存对齐;没有visit功能。没有考虑赋值构造函数的问题,存在隐患。 这次将解决以上问题,还将进一步增强variant的功能。增加的功能有:通过索引位置获取类型。通... 阅读全文

posted @ 2014-02-21 14:44 qicosmos(江南) 阅读(12574) 评论(2) 推荐(4) 编辑

2014年2月19日

(原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决

摘要: boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的。但是在使用过程中却发现各种不好用,归纳一下不好用的地方有这些:获取不存在的节点时就抛出异常获取属性值时,要排除属性和注释... 阅读全文

posted @ 2014-02-19 12:36 qicosmos(江南) 阅读(14351) 评论(1) 推荐(4) 编辑

2014年2月8日

(原创)用c++11打造类似于python的range

摘要: python中的range函数表示一个连续的有序序列,range使用起来很方便,因为在定义时就隐含了初始化过程,因为只需要给begin()和end()或者仅仅一个end(),就能表示一个连续的序列。还可以指定序列产生的步长,如range(0,10,8)产生的序列为[0, 8], 默认的步长为1,... 阅读全文

posted @ 2014-02-08 14:35 qicosmos(江南) 阅读(3906) 评论(1) 推荐(4) 编辑

2014年1月27日

(原创)发布一个c++11开发的轻量级的并行Task库TaskCpp

摘要: TaskCpp简介 TaskCpp是c++11开发的一个跨平台的并行task库,它的设计思路来源于微软的并行计算库ppl和intel的并行计算库tbb,关于ppl和tbb我在前面有介绍。既然已经有了这两个大公司开发的并行计算库,我为什么还要开发自己的并行计算库。有两个原因:ppl只能在window... 阅读全文

posted @ 2014-01-27 16:04 qicosmos(江南) 阅读(12036) 评论(12) 推荐(12) 编辑

2014年1月26日

(原创)用C++11的std::async代替线程的创建

摘要: c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);std::thread t(f, n + 1);t.join(); 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返回结果的时候,我就不能直接通过thread.join()得到结果,这时就必须定义一个变量,在线程函数中去给这个变量赋值,然后join,最后得到结果,这个过程是比较繁琐的。c++11还提供了异步接口std::async,通过这个异步接口可以很方便的获取线程函数的执行结果。std::async会自动创建一个线程去调用线程函数,它返回一个st... 阅读全文

posted @ 2014-01-26 16:40 qicosmos(江南) 阅读(56454) 评论(15) 推荐(24) 编辑

2014年1月15日

(原创)c++11中 function/lamda的链式调用

摘要: 关于链式调用,比较典型的例子是c#中的linq,不过c#中的linq还只是一些特定函数的链式调用。c++中的链式调用更少见因为实现起来比较复杂。c++11支持了lamda和function,在一些延迟计算的场景下,这个链式调用的需求更强烈了。链式调用要实现的目是,将多个函数按照前一个的输出作为下一个输入串起来,然后再推迟到某个时刻计算。c++中,目前看到PPL中有这样的用法。PPL中链式调用的例子:int wmain(){ auto t = create_task([]() -> int { return 0; }); // Create a lam... 阅读全文

posted @ 2014-01-15 22:30 qicosmos(江南) 阅读(6731) 评论(13) 推荐(1) 编辑

2014年1月13日

c++并行计算库TBB和PPL的基本用法

摘要: 并行库充分利用多核的优势,通过并行运算提高程序效率,本文主要介绍c++中两个知名的并行库,一个是intel开发的TBB,一个是微软开发的PPL。本文只介绍其基本的常用用法:并行算法和任务。TBB(Intel® Threading Building Blocks)TBB是intel用标准c++写的一个开源的并行计算库。它的目的是提升数据并行计算的能力,可以在他的官网上下载最新的库和文档。TBB主要功能:并行算法任务调度并行容器同步原语内存分配器TBB并行算法parallel_for:并行方式遍历一个区间。parallel_for(1, 20000, [](int i){cout (0, 阅读全文

posted @ 2014-01-13 11:39 qicosmos(江南) 阅读(35828) 评论(1) 推荐(7) 编辑

2013年12月26日

一点项目经验的总结

摘要: 前几个月开发了一个服务器网关程序,测试过程中发现了一些问题,问题的查找与修改花了一个月的时间。好在经过一个月的修改与完善终于解决了所有问题。现在网关服务器在局域网内吞吐量最高可以达到120MB/S,稳定运行7*24小时,性能和稳定性都让人满意。 然而其中遇到的问题也不少,现在回想起解决过程是痛并快乐着,以此文作一个经验教训的总结。 先说下项目背景,项目要求开发一个高性能的跨平台的网关服务器,主要性能指标是吞吐量达到70-80MB/s,并发连接数要到3000以上。现有的服务器性能达不到要求,最多不过30-40MB/s。这个项目也是我到新部门之后的首秀,也受到领导的高度关注。作为自己的首秀当... 阅读全文

posted @ 2013-12-26 17:25 qicosmos(江南) 阅读(8292) 评论(25) 推荐(11) 编辑

2013年12月23日

(原创)谈谈boost.asio的异步发送

摘要: 在上一篇博文中提到asio的异步发送稍微复杂一点,有必要单独拿出来说说。asio异步发送复杂的地方在于: 不能连续调用异步发送接口async_write,因为async_write内部是不断调用async_write_some,直到所有的数据发送完成为止。由于async_write调用之后就直接返回了,如果第一次调用async_write发送一个较大的包时,马上又再调用async_write发送一个很小的包时,有可能这时第一次的async_write还在循环调用async_write_some发送,而第二次的async_write要发送的数据很小,一下子就发出去了,这使得第一次发送的数据和.. 阅读全文

posted @ 2013-12-23 11:44 qicosmos(江南) 阅读(16135) 评论(10) 推荐(6) 编辑

2013年12月12日

(原创)如何使用boost.asio写一个简单的通信程序(二)

摘要: 先说下上一篇文章中提到的保持io_service::run不退出的简单办法。因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了,如何让异步事件队列中一直有事件呢?一个简单的办法就是循环发起异步读操作,如果对方一直都不发数据过来,则这个异步读事件就会一直在异步事件队列中,这样io_service::run就不会退出了。但是这样有一个缺点就是io_service::run处于阻塞会阻塞当前线程,如果不希望阻塞当前线程,就还是通过work来保持io_service::run不退出。 现在言归正传,看看如何用asio写一个简... 阅读全文

posted @ 2013-12-12 15:59 qicosmos(江南) 阅读(5707) 评论(5) 推荐(5) 编辑

导航