读了一些开源软件,接触了leveldb,memcached,zfs on linux.
觉得优秀的软件在设计上总是相似的。
列举出开源软件中使用的很好的设计模式:
Reactor
模式只是模式,与具体的实现不一定是一一对应的。他封装了一个可重用的事件分离和分发框架。可以用一个线程等待多事件源的事件请求的发生。直到从事件源处收到了事件,Reactor 获得了产生事件的事件句柄,并将事件以非阻塞的形式发送下去。不同的Reactor需要不同的事件分离器。
Half-Sync/Half-Async
这个设计模式是与Reactor经常是一起来使用的。并发的软件总是异步和同步同时存在。异步可以高效的利用底层提供服务,同步可以简化应用程序的处理工作。
这种模式采用三层架构,分为同步服务层,中间队列层,异步服务层。该模式通过中间队列层将同步服务层与异步服务层分开。在异步服务层只负责完成最基本的工作。然后将数据放入到队列层,同步层通过中间队列层(这里相当于memcached中的connect_queue)拿数据,并进行必要的同步工作。
前面的异步层可以通过Wrapper Facade 将与平台相关的异步IO功能封装到统一的接口层中,借此实现并发软件的可移植性。memcached就很好的利用了这一点,使用libevent,libevent将与平台相关的内容封装到了库里。这样memcached就可以移植到了不同的平台上。
阅读(360) | 评论(0) | 转发(0) |