为PHP7添加新的数据结构支持

原创
2016/04/07 20:36
阅读数 118

前言

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数组来说已经有很大提高。 未来在实现功能时, 我们会多一种选择, 这总归是好事, 不是吗?

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部