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

前言

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

转载于:https://my.oschina.net/rssidea/blog/654758

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值