为PHP7添加新的数据结构支持
2016-04-07 00:00
417 查看
摘要: 随着PHP常驻内存程序的发展,未来可能出现一些对内存占用,对数据结构操作性能更敏感的项目,对PHP内置数据结构的支持也提出了更高的要求。
数组,作为php最常用的数据结构,没有之一。尽管PHP7重新设计了数组的实现,大大提高了内存占用率和CPU缓存友好, PHP7速度的提升相当一部分也得益于此。 但是, 毕竟我们不能用一种数据结构优化所有场景。 随着PHP常驻内存程序的发展,未来可能出现一些对内存占用,对数据结构操作性能更敏感的项目。
比如我们在内存里保存一个大的数字序列, 或者一个布隆过滤器等等, 如果使用PHP数组会造成内存的浪费。幸运的是, 早有人发现这个问题, 我们可以很容易地为PHP7增添新的数据结构,甚至自己去实现需要的数据结构。
支持的数据结构有: Vector, Deque, Stack, Queue, PriorityQueue, Map, Set
前言
PHP近来有了长远进步, 一方面,PHP7的发布让执行速度有了明显提高; 另一方面,随着swoole的逐渐稳定,必将会出现越来越多的基于PHP的常驻内存的服务化应用,大大降低了由于php请求不断销毁资源导致的性能损失(可围观我的基于swoole的fastcgi实现,优化laravel接口性能50+倍)。数组,作为php最常用的数据结构,没有之一。尽管PHP7重新设计了数组的实现,大大提高了内存占用率和CPU缓存友好, PHP7速度的提升相当一部分也得益于此。 但是, 毕竟我们不能用一种数据结构优化所有场景。 随着PHP常驻内存程序的发展,未来可能出现一些对内存占用,对数据结构操作性能更敏感的项目。
比如我们在内存里保存一个大的数字序列, 或者一个布隆过滤器等等, 如果使用PHP数组会造成内存的浪费。幸运的是, 早有人发现这个问题, 我们可以很容易地为PHP7增添新的数据结构,甚至自己去实现需要的数据结构。
安装
# Dependencies you might need to install # sudo add-apt-repository ppa:ondrej/php # sudo apt-get update # sudo apt-get install git build-essential php7.0-dev git clone https://github.com/php-ds/extension "php-ds" cd php-ds # Build and install the extension phpize ./configure sudo make install # Clean up the build files make clean phpize --clean
性能分析
作者写了一篇很好的文章, 用视频展现了数据结构操作是如何变化的, 并分析了各种操作的复杂度, 最后还列出了时间和空间曲线。感觉再说啥都是画蛇添足了:Efficient data structures for PHP 7支持的数据结构有: Vector, Deque, Stack, Queue, PriorityQueue, Map, Set
结论
受限于zval的内存占用, 这些数据结构和C实现相比, 内存占用还是要高很多, 但是相对PHP数组来说已经有很大提高。 未来在实现功能时, 我们会多一种选择, 这总归是好事, 不是吗?相关文章推荐
- 《常见算法和数据结构》元素排序(4)——凸包问题
- 二叉树的创建即遍历(递归方式)
- 《常见算法和数据结构》元素排序(3)——洗牌算法
- 《常见算法和数据结构》元素排序(2)——希尔排序(动画)
- 树的前序遍历非递归、中序遍历非递归、后序遍历非递归
- 模拟实现操作系统内存分配与回收
- PHP学习(十一)--数组与数据结构
- 模拟实现操作系统调度算法
- 《常见算法和数据结构》元素排序(1)——简单排序(附动画)
- 数据结构:队列- 顺序队列
- Uva699 839二叉树的遍历
- 数据结构-----栈的实现
- 《数据结构》 定长顺序串常用操作代码集合
- 数据结构:栈
- 数据结构(左偏树,可并堆):BNUOJ 3943 Safe Travel
- c语言数据结构(3)
- 数据结构学习(一)
- mmap函数和mprotect函数
- Python 数据结构与算法 —— Prim 算法与小顶堆
- Python 数据结构与算法 —— Kruskal 算法