我有一个小巧的PHP脚本,监视CentOS 5服务器上的豆杆消息队列。 当它得到消息时,它开始执行一个特定的动作,一旦完成,就返回队列,并且听取更多的工作。
一切都很好,迄今为止没有问题。 一个朋友在几天前的一次随机谈话中对我说,这将是一个理想的脚本,可以利用服务器上的多个内核。 那响了我一声钟 – 好主意! 如果我需要两个进程运行,我想我需要两台服务器,但可能不是。
所以问题是,如果我在一台服务器上运行2,3,4 … x个脚本的副本,是否会减慢其他脚本的执行速度,还是不会受到影响? 鉴于脚本只是在听,然后再回头再听,是否可能会有任何冲突呢? 我赞赏后者可能比一个服务器更多的编程问题!
如果这是运行在Apache上,使用mpm_prefork (因为它是PHP),那么Linux内核将平衡多个核心之间的subprocess。
如果在命令行上运行这些内核,则它们不一定在不同的内核上运行,然后在不同的内核上运行,则需要使用taskset或cpuset来将每个实例的处理器关联性定义到不同的内核。
从理论上讲,运行一些等于或小于服务器核心数量的脚本是可以的,但实际上你仍然需要CPU来运行内核和其他软件/守护进程,所以YMMV。 所有这些都受到应用程序的types,连接,对外部软件和networking的依赖等的影响,所以你真的必须在自己的基础设施上进行testing。
我的理解是这样的:有一个消息队列。 一个PHP脚本消耗来自这个队列的消息。 所采取的操作因磁盘访问,networking活动和CPU密集型任务而异。
(什么coredump说pipe理利用多个进程。)
另外,如果某些任务存在延迟(例如,通过networking链接进行交谈),则甚至可能需要比内核数量更多的脚本。
最终,只有测量可以告诉。 build立一个testing系统,并用真实的消息组合来锤击它。 只要实际上有多个内核,testing的系统就不重要了。 虚拟机很好, 在增加消费者数量的情况下,您仍然会有一种体面的感觉。