当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

AMPS

异步服务器设计框架
授权协议 GPL
开发语言 C/C++
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 不详
投 递 者 蓬宾白
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

AMPS一个中间件,它提供了一个框架,用于构建任何一个事件驱动的,异步处理的应用。与传统的基于线程的实现,AMPS允许单线程的方法,执行高并发应用程序。

AMPS is a middleware that provides a framework to write any software application as an event driven, asynchronous process . Unlike conventional thread based implementations, AMPS allows highly concurrent applications to run as a single thread of execution. 

AMPS实现要求,应用被设计成有限状态机的模型,状态的改变是基于事件的,每个状态的改变都要求有事件处理程序一旦这样的设想,实现能提供多重好处。

AMPS implementations require that the application be modelled as a FSM (Finite State Machine) that changes state based on ‘events’. ‘Event handlers’ are written for each state change. Once envisioned in this way, implementations provide multiple benefits. 

本编程模型的好处有:

  • 所有的执行都是不需要锁的。没有锁,没有互斥,不需要请求信号。
  • 所有事件处理程序都是确定的。
  • 自然支持对称多处理,非对称多处理和多核心系统。
  • 程序是云就绪的.
  • 没有线程间上下文切换或者等待锁的系统开销。
  • 代码是在线程所产生的耦合效应应用的深入细微的错误自由。
  • 代码避免了基于线程的应用由于深度耦合而产生的bug.

Some of the benefits of this programming model are:

  • All execution is lock free. No locks, no mutexes, no semaphores required ever.
  • All event handlers are deterministic
  • Natural support for Symmetric multi-processing, Asymmetric multi processing and multi-core systems.
  • Applications are cloud ready
  • No system overhead in context switching between threads or waiting for locks.
  • Code is free of subtle bugs arising out of deep coupling effects in thread based applications.
Products developed on AMPS(基于AMPS开发的产品)
  •   上节看了AMPS中通过数组+单链表实现的内存池,本节看看另一个实现方式。此方法思路如下:其内存池结构为一个存放已分配内存信息的双链表,一个表示内存池大小的变量,一个指向当前内存链表结点的指针链表,如下: /*内存池结构*/ struct _newMMContext { t_AMPSDList* memBuffList; /*结点链表*/ int nSizeOfBuff

  •   在AMPS中,使用内存池来管理内存,具体机制见之前的文章《AMPS:内存管理(二)》,在代码中,使用了两种实现方式,第一种是数组+单链表。今天先看看这个方式下的内存池实现。 AMPS_MemoryMgt.h #ifndef __HEADER_AMPS_MEMORY_MGMT_H__ #define __HEADER_AMPS_MEMORY_MGMT_H__ #include "AMPS_De

  •   Timer模块的实现比较复杂,需要结合前面的文章《AMPS:定时器管理》才能有所理解,下面看看AMPS中的定时器实现,有些细节方面我也没有想清楚。  AMPS_Timer.h #ifndef __HEADER_AMPS_TIMER_H__ #define __HEADER_AMPS_TIMER_H__ #ifdef __cplusplus extern "C" { #endif #

  •   这里讲的Cache并不是通常说的计算机存储系统中的高速缓存,而是软件层面的缓存,它的做用主要是为了提高数据处理的效率。在AMPS中,Cache的结构如下: /*Cache结构*/ struct _AMPSCache { void* pvHASHTable; /*Hash表,用于查找*/ void* pvHeap; /*堆,用于增删改*/ int nCacheSize;

  •   看看AMPS中的日志模块,有两种写日志的方法,一是直接使用封装好的API函数写,另一种是通过应用层注册的日志回调函数,利用事件管理机制来写。   AMPS_Log.h #ifndef __HEADER_AMPS_LOG_H__ #define __HEADER_AMPS_LOG_H__ #include <stdio.h> #include "AMPS_SystemAPI.h" #inclu

  •   队列概念很简单,就是排队,先进先出,通常有链表形式和数组形式(即链接类型和顺序类型),它也是软件构建的一个基本数据结构,看看AMPS中的队列实现。  AMPS_Queue.h #ifndef __HEADER_AMPS_QUEUE_H #define __HEADER_AMPS_QUEUE_H #ifdef __cplusplus extern "C" { #endif #include

  •   本节看看AMPS中对Oracle数据库进行操作的方法,使用的是Oracle的C访问接口OCI,关于OCI各函数的中文说明可参考这篇文章http://www.cnblogs.com/joeblackzqq/archive/2011/04/24/2026461.html  下面看看AMPS中Oracle操作各函数实现:  AMPS_Oracle.h #ifndef __HEADER_AMPS_DB

  •   AMPS做为一个中间件,也提供了访问数据库的接口,目前支持MySQL和Oracle(对我所喜爱PostgreSQL却默认不支持,看来我的爱好属于非主流哈~),下面要看的是DBEngine库,它只做一件事情,就是封装了不同数据库操作的差异,提供一个数据库统一访问接口。下节再看针对不同数据库的具体操作。 AMPS_DBEngine.h #ifndef __HEADER_AMPS_DB_ENGINE

 相关资料
  • 异步Tcp客户端 异步Http客户端 异步Redis客户端 异步Mysql客户端 异步Log日志 异步文件读写 异常Exception

  • 【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。

  • 【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。

  • 【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。

  • 异步Log日志 use AsyncLog; yield AsyncLog::info('hello world'); yield AsyncLog::debug('test debug', ['foo' => 'bar']); yield AsyncLog::notice('hello world',[], 'group.com'); yield Async

  • 异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc