哪种语言具有更好的线程功能?PHP还是Ruby?

3

我正在创建一个需要线程的Web应用程序,我正在尝试确定PHP和Ruby哪个语言具有更好的线程功能和更好的性能。

即使没有内置的线程功能,也可以使用一些简单的解决方法或附加组件。


3
为什么在 web 应用中需要使用线程呢?你是否真的会为单个请求处理如此多的数据而需要多个线程来完成?如果是这样,那么你的服务器不会很容易被压垮吗? - tloach
@tloach 线程并不一定意味着压倒性的处理。它只是减少了处理时间。串行处理的时间可能是10秒或1秒,这并不重要。关键是缩短处理时间。无论如何,您总是可以增加更多的硬件来解决问题。 - Lucas Oman
1
@Lucas:除了Web应用程序本质上是多线程的,因为每个请求都在不同的进程中处理。 在所有内核已经繁忙的系统上,多线程不太可能带来性能提升,事实上它会降低性能,因为它会引入开销。 - tloach
@tloach 是的,你说得对。抱歉让你感到困惑。当我使用“线程”这个词时,我是使用了更自由的定义;请参考我的下面回答(具体来说:Web服务)。 - Lucas Oman
基本上,我的Web应用程序需要在后台运行几千个查询,时间限制为5分钟。我不能从一个线程中运行此操作,因为一个线程只能运行我所需的查询的四分之一左右,而且时间段不能超过5分钟,因此需要使用多线程。你认为呢? - Aceacer
6个回答

9
我认为Ruby更好,因为Ruby支持多线程,而PHP不支持。在PHP中,你可以创建新进程(这是一个不好的想法),或编写多个Web服务并使用curl_multi_*函数来完成某些事情,但是PHP不支持多线程功能。

基本上,我的 Web 应用程序需要在后台运行几千个查询,在 5 分钟内完成。我不能从一个线程中运行它,因为一个线程只能运行我所需的查询的四分之一左右,而时间段不能超过 5 分钟,因此需要使用线程。你觉得呢? - Aceacer
为什么Web应用程序需要运行后台处理? - Peter Lindqvist
非常抱歉我的术语不太准确,但基本上我的应用程序由前端和后台处理模块组成。 - Aceacer

5

如果你想要使用多线程,那么Ruby和Python可能是最不好的选择。但如果你非要用其中之一的话,我猜测Ruby可以胜任。不过还是建议使用JRuby,因为JVM在多线程方面表现非常优秀。

(或者你可以选择Groovy,它基本上就是拥有许多Ruby特性的Java。)


2

PHP通常不支持多线程。


2

PHP没有线程(在我看来是一件好事)。

Ruby有线程,但在1.8版本中它只有绿色线程,在1.9版本中它有GIL。这意味着(对于MRI和YARV-1.8和1.9主要的Ruby实现),两个线程不能同时运行(在两种情况下都是如此),你无法利用多核处理器。

你可以在两种语言中使用进程来克服这些限制。


绿色线程无法利用多核处理器是不正确的说法。Erlang和MzScheme等都是反例。同样,Ruby 1.8没有绿色线程。Ruby规范中没有强制要求Ruby实现使用绿色线程,事实上,除了一个之外,所有Ruby 1.8实现都使用本地线程。而且,Ruby 1.9也没有GIL。同样,Ruby规范中没有强制要求实现具有GIL,大多数实现都没有。 - Jörg W Mittag
Jörg - 没错!当我谈到 Ruby 时,通常指的是 MRI(JRuby 具有适当的线程支持)。 - Emil Ivanov

2

目前PHP不支持显式使用线程;您的PHP服务器可能会使用线程来服务不同的HTTP请求(我相信Zend引擎会这样做),但是没有通过PHP代码创建或协调线程的设施。


0

这两种方法可能都不是你想要实现的好方式。

考虑使用Gearman来异步处理“作业”。如果你想要将你的服务与其他服务松散耦合,那么你需要一个消息传递服务,比如RabbitMQ

看起来Gearman会符合你的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接