编程文汇

封装一个简单的并发库

最近用c做了一个简单的库,专门应对于游戏开发,规划功能如下:

  1. 本着小巧、简单、易用、高性能的原则
  2. 跨平台 windows linux android ios
  3. 支持协程、线程 、异步socket IO、websocket
  4. 支持常用的多线程数据结构

现在初步实现了线程、协程的封装,并没有大量编码,主要是复制粘贴,尽量采用现有优秀库中的稳定代码,比如协程采用了boost context,定时器采用的java timer中的基于平衡二叉树的优先级队列。尽量采用安全稳定的代码。

协程的现有运行结果如下:

单线程 单个协程:
每秒yield切换:1300万次

单线程 100个协程:
每秒yield切换:1400万次

单线程 1000个协程:
每秒yield切换:1400万次

单线程 4000个协程:
每秒yield切换:1260万次

单线程 10000个协程:
每秒yield切换:550万次

单线程 30000个协程:
每秒yield切换:300万次
  1. 随着协程数增加,二叉树增大,定时器的短板就显露出来,以后可以考虑用时间轮来替代二叉树。
  2. 同时,由于协程数很多,暂用内存比较大,cpu缓存miss也显著影响切换效率。