Zuocheng Liu

Results 8 comments of Zuocheng Liu

非常感谢提建议,我尝试添加一下

Hi,您好munggruel! 谢谢提意见啊(开心),针对这个issue,我说一下哈~ 1. foreach 循环调用,会重复new对象。可不可以用这个方法?循环使用表示参数类型的对象,每个表示PNIDataType,都有一个成员函数 setValue,用来更改参数,这样就可以重复使用对象了。这个功能我今天加上哈。 2.做这个库性能是一方面,还有的作用是解决PHP无法完成的功能,比如调用机器学习库、图像处理这类C/C++的库。 3.每次调用都要New对象,主要是考虑编程的安全,PHP是弱类型语言,而C是强类型语言,写PHP的人容易在参数类型上不讲究,调用很容易出错,用对象约束并提醒开发者,调用前一定要确认要调用的C函数的参数类型。

在windows上,使用cygwin 下面的gcc , 好像是可以的,回头我试一下。

之前在cygwin上面用gcc编译过,但是用PNI调用动态链接库还是会报错。

> 但是我看到windows上的php7.4已经直接带了php-ffi这个扩展了,也可以调用外部dll了 嗯,已经有新的机制来解决怎么调用c语言了。感觉php-ffi 有点类似php-lua,把c代码内嵌到php代码里,每次运行都要编译一下,官网也说效率会慢一下。

ZEND_REGISTER_RESOURCE 是单个进程中进行的,多个进程间不会共享,保存resource资源的结构体,在每个进程中维护。(进程间共享数据的方式,只有信号、信号量,unix域、管道、共享内存,消息队列那几种) 一般情况下,操作系统为单个进程运行时加载相同动态库只需加载1次。但是PNI使用fnctl库中 dlopen,dlclose,完全可以动态加载和关闭动态链接库。PNI还做了一个优化,把打开的动态链接库句柄持久化,这样PNI打开相同的动态链接库只要加载1次即可。 并发情况下,因为php-fpm 使用Fastcgi模式,也就是多进程模型。 这样每个进程启动都会动态加载1次动态链接库,但是每个进程可以被重复使用,去多次处理不同请求,所以单个进程对动态库加载只需要1次,后面重复使用。 动态链接库和纯c相比,或者说与静态编译相比,有人做过测试,性能会损失3%左右,《程序员的自我修养》这本书上好像有提到。像PHP扩展这种,大多也都是以动态链接库的方式去加载的。 我看到您已经加QQ群啦,欢迎到群里聊啊。

Hi, munggruel. 非常感谢您的建议和意见。 我现在对PHP-CPP还不太熟,去学习一下,然后再来答复您。 欢迎加入PNI的QQ群,297031218。如果有什么想法,大家可以快速交流。