青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

03 2016 档案

摘要:通过多路复用构建高性能服务器是一种常见的模型,单个I/O多路复用线程+一组工作线程,I/O线程负责协调分配任务,而实际工作交给工作线程处理。这种模型的好处在于高效并发和充分利用多线程的处理能力。 以memcached的构架图为例 memcached的主线程用epoll监听到EPOLLIN事件,并且触 阅读全文
posted @ 2016-03-30 22:03 Leo.Z 阅读(388) 评论(0) 推荐(0)
摘要:做项目过程接触到disque,记录一下。 disque是redis之父开源的基于内存的分布式作业队列,用c语言实现的非阻塞网络服务器。 disque的设计目标:Its goal is to capture the essence of the "Redis as a jobs queue" use 阅读全文
posted @ 2016-03-30 21:11 Leo.Z 阅读(350) 评论(0) 推荐(0)
摘要:SOA是什么? 英语直译是基于服务的架构,就是一种技术框架,促使企业内部与外部所有相关的系统公开和访问定义良好的服务和绑定于服务的信息,进一步抽象成流程层和组合应用,从而构成解决方案。 说人话:重用服务和子系统。 SOA的优势 服务和行为的重用,在一个系统中可以方便的使用另外一个系统的服务。 快速修 阅读全文
posted @ 2016-03-28 22:33 Leo.Z 阅读(249) 评论(0) 推荐(0)
摘要:zeromq是什么? zeromq是一套专注于消息通信的网络库,把它称作消息队列其实不恰当,zeromq的竞争对手也不是kafka、rocketmq、memchedmq这些消息队列。 zeromq不是什么? zeromq不是对socket的封装,可以认为zeromq在应用层和传输层之间又构建了一层。 阅读全文
posted @ 2016-03-28 22:08 Leo.Z 阅读(1224) 评论(0) 推荐(1)
摘要:许多异步操作需要申请一个对象来保存操作状态,比如,win32需要OVERLAPPED导出的对象来传递给win32  API函数。此外,程序通常包括简单的可辨明的异步操作链,一个半双工协议(比如HTTP)为每一个client保存一个异步操作链(发送以后就是接收),一个全双工的协议可能拥有两个并行执行的 阅读全文
posted @ 2016-03-13 23:34 Leo.Z 阅读(440) 评论(0) 推荐(1)
摘要:许多广泛应用的网络协议是基于行的,这意味着许多协议元素通过"\r\n"来分割,比如HTTP、SMPT、FTP,为了更方便的实现基于行的协议,和其他基于分隔符的协议一样,Boost::Asio包括了read_until() 和async_read_until()。下面的例子阐述了async_read_ 阅读全文
posted @ 2016-03-13 16:00 Leo.Z 阅读(215) 评论(0) 推荐(1)
摘要:有的时候程序必须依赖第三方库来完成I/O操作,鉴于这种情况,Boost::Asio提供了一个null_buffers 类型可以同时完成读和写操作,null_buffers 直到执行I/O操作的对象就绪才返回。下面是一个执行非阻塞的读操作的例子ip::tcp::socket socket(my_io_ 阅读全文
posted @ 2016-03-13 15:46 Leo.Z 阅读(197) 评论(0) 推荐(1)
摘要:Boost::Asio中的许多I/O对象是流导向的,这意味着; @没有消息边界,在传输的数据是一个连续的字节序列 @读或者写传输的字节可能比请求更小,这就是被称作简短的读或者写 提供流定向模型的对象一个或者多个下列类型的必要条件:SyncReadStream,使用成员函数read_some()执行同 阅读全文
posted @ 2016-03-13 15:39 Leo.Z 阅读(219) 评论(0) 推荐(1)
摘要:从根本上讲,I/O包含了数据从源到目的地的连续内存的传输,这叫做缓存,这些缓存可以简单的描述为包含了一个指针和一组字节数据的元组,然而,为了支持高效网络应用程序的开发,Boost::Asio支持分散-聚合操作,这些操作同时支持一个或多个缓存。分散读 接收数据并写入多重缓存中。分散写 传输数据给多个缓 阅读全文
posted @ 2016-03-13 15:17 Leo.Z 阅读(241) 评论(0) 推荐(1)
摘要:一个串被定义为序列的调用事件句柄(非并行调用),使用串允许在多线程环境中执行代码而不使用显示的互斥锁。串可以是隐式的或者显式的,如下方的可替代方法所示:仅在一个线程中调用io_service::run()意味着使用隐式的串执行所有的事件句柄,因为io_service确保了句柄只被run()内部调用。 阅读全文
posted @ 2016-03-12 23:18 Leo.Z 阅读(383) 评论(0) 推荐(1)
摘要:线程安全一般的,高并发使用不同的对象是安全的,在高并发中使用单一的对象是不安全的,io_service类型提供了单对象高并发的强安全保证。线程池多线程可能调用io_service::run()来建立一个可以调用完成句柄的线程池,也可以使用io_service::post()把计算任务交给线程池处理。 阅读全文
posted @ 2016-03-12 21:21 Leo.Z 阅读(1158) 评论(0) 推荐(1)
摘要:Boost::Asio为同步和异步操作提供了并行支持,异步支持基于前摄器模式,这种模式的优点和缺点可能比只同步或反应器方法要低。让我们检查一下Boost::Asio是如何实现前摄器模式的,没有引用基于平台的细节。前摄器设计模式,改编自POSA2--异步操作 定义一个异步执行的操作,比如socket的 阅读全文
posted @ 2016-03-12 12:38 Leo.Z 阅读(1029) 评论(0) 推荐(1)
摘要:Boost::Asio可以在socket等I/O对象上执行同步或异步操作,使用Boost::Asio前很有必要了解Boost::Asio、你的程序以及它们交互的过程。作为一个引导的例子,我们思考一个当一个socket执行连接操作时发生了什么,我们首先开始一个同步的例子你的程序需要一个io_servi 阅读全文
posted @ 2016-03-11 23:19 Leo.Z 阅读(1200) 评论(0) 推荐(2)
摘要:多线程及多进程编程同步时可能出现的问题,如果一个值被P1读取两次,两次的值相同,据此判断该值没有被修改过,但该值可能在两次读取之间被P2修改为另外一个value,并在P1再次读取之前修改回了原值。P1被愚弄,认为该值一直没有改变过。 下面的事件序列会导致ABA问题 1.线程P1访问共享内存的valu 阅读全文
posted @ 2016-03-09 22:35 Leo.Z 阅读(420) 评论(0) 推荐(1)
摘要:for(int i = 0,j = 1; i = j = 0; i++, j--){;}以上循环会执行多少次A 0B 1C 无限循环D 以上都不对 关键是条件的赋值表达式i = j = 0;结果还是0,第一次循环都不会执行,如果这里换成i = j = 1;就会是无限循环。 同理的if和while判断 阅读全文
posted @ 2016-03-09 12:31 Leo.Z 阅读(216) 评论(0) 推荐(1)
摘要:看题说话 test a(); test b(2); test c[3]; test &ra = b; test d = b; test pA = c; test p = new test(4); 到底产生了多少个对象,我也是好奇这道题考察的是什么?因为这里面不是简单的考察构造函数和拷贝构造函数,还捎 阅读全文
posted @ 2016-03-08 09:47 Leo.Z 阅读(302) 评论(1) 推荐(1)