国内用php做deamon的多起来了,有名的如swoole,而wokerman则把小广告贴得到处都是。反观国外,高手扎堆的ReactPHP却不温不火。PHP适合写deamon吗?有人会说,写GTK界面都行,写个deamon算啥。
PHP的“执行后释放所有资源”的方式在主流语言里是独一无二的,这让它开发web时,没有Java和Ruby里内存泄漏(假释放)的问题,不过也让人诟病它的性能。我曾经跟人说,这种简单暴力的方式才是正途。但如果用PHP写命令行甚至daemon守护进程,会怎样?
不能写得庞大(我指处理业务多,执行的时间久),最近用PHP从SQLSERVER导出大量数据到MySQL,发现PHP还是适合web的短小,在命令行下,如果要执行很久,需要自己释放内存,否则达到配额PHP进程就挂了。而PHP释放内存的方式实在有限,用完对象调用一下析构函数,因为它本就不是为对象持久化设计的。可在PHP里,很多地方要不要释放内存、能不能释放内存都不清晰。还是把一次长时间的执行分开吧,执行几分钟就退出PHP进程,用定时任务多次启动执行。
现在我在想,那些热衷于完全用PHP实现daemon的家伙,是不是在找罪受?为什么不跨语言,让Python等语言去做这些它们擅长的事情。有thrift、gearman、消息队列,现在的跨语言是很容易的事情;或者用HTTP发送JSON数据,更普遍适用于各种语言。
传送门:左轻候大人 的 PHP沉思录之一——工作模型