Skip to content

kevin-zhong/yifei

Repository files navigation

Name

yifei -- a project named with the name of my daughter

功能包括: 1,库基础依赖api及数据结构 i) unix system 系统调用等薄包装 -> src/ppc/ 主要屏蔽unix,linux各系统之间的差异,比如;socket等等

ii) system相关的一些资源包装:   -> src/ppc/
		比如:进程相关,线程相关,信号,共享内存,时间戳(时间缓存+多线程夺取update)
			锁,快速锁(利用与cpu平台相关的汇编代码生成,比pthread的锁要快,平稳)
			atexit 升级(系统自带atexit太弱)
			
iii)非常丰富且效率极高的数据结构 -> src/base_struct
		比如:[内存池]: yifei整个库的基石,除了内存分配,还起到映射寻址等重要功能;
										包括3类 - 1)定长,定数量; 2)定长,数量自动伸缩; 
															//支持从id到节点的快速映射(非常迅速,避免使用者建立id->节点的映射map)
														  3)变长(类似stl的内存池);4)多次分配,一次销毁(来源于nginx)
														  
					[位操作]: 非常基础且非常重要的库,基本上处处用到,主要功能有:
										位操作,对齐,寻址,数字合并拆分,计数
										
					[id分配器]:非常基础且非常重要的库,用于生成空间/时间唯一且值很大的的64位id(why big?),
										用于各个地方(比如内存分配的节点,定时器,协程等等)
										且在多线程下,效率不降低(really? how? 看代码)
										
					[list]:  浸入式的slist,list,和linux内核用的链表基本一致,
										特点:浸入|异常灵活|效率奇高(stl::list易用但差太远,鄙视下)
										
					[log]:    最重要的特点:留下了扩展接口,支持自由扩展,参考 log_ext
					
					[string]: 带len的string,且有一组非常丰富的函数(来源于nginx)
					
					[rbtree]: 暂时还没用到,感觉尽量少用复杂数据结构,能用内存池和list能解决最好
					
ix) 一个log扩展,带缓冲,后台独立子线程sync到硬盘,不会阻塞其他线程;重要功能:
		带缓冲 -- 突破log io瓶颈
		保证程序core或者被kill缓冲日志不丢 -- 即使缓冲还是能保证不丢日志
		少日志时自动定时sync

2,类似libevent的一个跨linux/solars/FreeBSD/SunOS/Darwin等 unix system平台的一个异步事务驱动器,包括事件类型: i) fd 句柄 ii) signal 信号 iii)timer 定时器 ix) proc 子进程调用

3,独创的服务器各类运行实例通信交互模式工厂,已实现模式有: i) 父进程(非阻塞/异步) -> 子进程(非阻塞/异步) ii) 父线程(非阻塞/异步) -> 子线程(非阻塞/异步) iii)父线程(非阻塞/异步) -> 子线程(阻塞/同步)

三者之间其实还是有简单的层级关系的 第一层是基础api,第二层是异步框架,第三层其实是一个业务框架; 第一层没有单独应用的意义,第二层实际上是可以单独使用的(即也许根本不需要第三层) 那第三层做什么用呢?第三层其实利用了第二层来实现了业务框架,可能会用到的地方: 1,弥补第二层的薄弱,因为第二层异步框架完全异步,非阻塞,但是是单线程的。不能真正并行利用cpu 比如:可以把网络层拆分到多个异步框架线程里面去,每线程一个异步框架;//子线程非阻塞异步 或者把cpu密集型的调用剥离到辅助线程里面去,子线程专门辅助计算; //子线程阻塞同步等待任务 2,另外最重要的原因是,在某些条件下,确实避免不了阻塞,比如:memcached, mysql 等等库函数都是阻塞的 这种阻塞的调用是不能出现在异步框架中的,必须剥离到单独的子线程中去... 当然:这种剥离是非常恶心的...

所有的目的是什么?为了能把阻塞变成非阻塞,把所有的行为都演变成了回调!!

Usage

此项目是一个工具库,可用于unix后台异步server的搭建

具体使用方法见 test/ 目录中的单元测试程序,主要有三个:

yf_base_testor.cpp yf_driver_testor.cpp yf_bridge_testor.cpp

Author

name: kevin_zhong mail: qq2000zhong@gmail.com

About

high perfomace, easy for use inner server framework

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages