文档章节

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

ChefXu
 ChefXu
发布于 2016/04/07 20:36
字数 609
阅读 83
收藏 0

前言

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

© 著作权归作者所有

ChefXu
粉丝 12
博文 6
码字总数 11518
作品 0
海淀
程序员
私信 提问
[译]变量在 PHP7 内部的实现(二)

→ About → Links → Github → 公众号 Scholer's Blog [译]变量在 PHP7 内部的实现二 Dec 21, 2015 本文第一部分和第二均翻译自Nikita Popov(nikicPHP 官方开发组成员柏林科技大学的学生)...

污湖洞主
2017/06/11
0
0
Swoole 1.9.6 发布,增加高性能序列化模块

PHP的异步、并行、高性能网络通信引擎Swoole 已发布 1.9.6 版本。此版本增加了一个根据PHP7内存结构特点设计的高性能序列模块,序列化和反序列化耗时仅为PHP官方serialize库的40%,尺寸更小。...

matyhtf
2017/02/24
2.3K
11
Zend Studio使用教程:使用PHP 7进行开发(三)

本教程将为大家介绍Zend Studio新版本中支持PHP 7的一些新功能,以便您可以在项目中开始使用PHP 7。 Zend Studio最新试用版下载请猛戳>>> 教程内容 在本教程中,您将学习: 如何使用PHP 7 E...

电池盒
01/09
22
0
phpredis -- Redis编译安装,PHP 7 安装 Redis 扩展

安装 Redis Server redis的官方网站是:http://redis.io/ 目前的最新稳定版是 3.2版。 下载redis wget http://download.redis.io/releases/redis-3.2.3.tar.gztar xf redis-3.2.3.tar.gzcd ......

yangji008
2016/09/10
0
0
在 CentOS 7 中安装 Nextcloud

导读 Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 ...

问题终结者
2017/11/05
202
0

没有更多内容

加载失败,请刷新页面

加载更多

MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
9
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
7
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
5
0
4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

你好,我是彤哥,本篇是netty系列的第四篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的N...

彤哥读源码
今天
7
0
如何把握好面试的最后一问 ?

如何把握好面试的最后一问 ? 你有没有听过这句话 “ 你还有什么问题想问我的吗? ” 如何把握好面试的最后一问 ? 要积极稳妥,切莫减分、丢分、扣分。比如,你提问的问题很傻很天真,比如你提...

编程三分钟
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部