2009-12-09 2 views
3

스레딩이 필요한 웹 응용 프로그램을 만들고 있는데 PHP와 Ruby 사이에 어떤 언어가 더 나은 스레딩 기능과 성능 향상이 있는지 알아 내려고하고 있습니다.더 나은 스레딩 기능을 가진 언어는 무엇입니까? PHP 또는 Ruby

내장되어 있지 않더라도 몇 가지 간편한 해결 방법이나 추가 기능이 있습니다.

+3

왜 웹 앱의 스레딩이 필요합니까? 단일 요청에 대해 여러 스레드를 필요로하는 많은 처리를 정말로하고 있습니까? 그렇다면 서버가 쉽게 압도되지 않을까요? – tloach

+0

@tloach 스레딩은 반드시 압도적 인 프로세싱을 의미하지는 않습니다. 처리 시간이 줄어 듭니다. 연속적으로 처리 할 시간은 10 초 또는 1 초가 될 수 있습니다. 요점은 그 시간이 무엇이든간에 줄입니다. 어쨌든 항상 더 많은 하드웨어를 던질 수 있습니다. –

+1

@ 루카스 : 웹 앱이 웹이되어 멀티 스레드 된 것을 제외하고 각 요청은 다른 프로세스에서 처리됩니다. 멀티 스레딩은 모든 코어가 이미 사용중인 시스템에서 성능을 향상시키지 못합니다. 실제로 오버 헤드가 발생하기 때문에 성능이 저하 될 수 있습니다. – tloach

답변

2

PHP는 일반적으로 스레딩을하지 않습니다.

9

Ruby가 실제로 지원하므로 Ruby를 말해야합니다. PHP는 그렇지 않습니다.

PHP를 사용하면 새로운 프로세스를 생성하거나 (나쁜 생각입니다) 여러 웹 서비스를 작성하고 curl_multi_ * 함수를 사용하여 몇 가지 작업을 수행 할 수 있지만 스레딩은 PHP의 기능이 아닙니다.

+0

기본적으로 내 웹 앱은 백그라운드에서 5 분 동안 수천 개의 쿼리를 실행해야합니다. 하나의 스레드가 필요한 쿼리의 약 4 분의 1 만 실행하므로 시간 간격은 5 분이 넘을 수 없으므로 스레드를 하나씩 실행할 수 없습니다. 어떻게 생각해? – Aceacer

+0

웹 응용 프로그램이 백그라운드 처리를 실행하는 이유는 무엇입니까? –

+0

내 용어에 대한 사과는 있지만 기본적으로 내 응용 프로그램은 프런트 엔드 및 백그라운드 처리 모듈로 구성됩니다. – Aceacer

2

PHP에는 스레딩이 없습니다 (좋은 점은 IMO).

루비는 1.8이 있지만 녹색 실이 있으며 1.9에서는 GIL이 있습니다. 이것이 의미하는 바는 (MRI와 YARV의 경우 1.8과 1.9의 Ruby 구현) 두 스레드가 동시에 실행될 수없고 (두 경우 모두) 멀티 코어 프로세서를 사용할 수 없다는 것입니다.

두 언어의 프로세스를 사용하여 이러한 제한 사항을 극복 할 수 있습니다.

+0

녹색 스레드가 멀티 코어 프로세서를 이용할 수 없다는 것은 사실이 아닙니다. 반례는 Erlang과 MzScheme입니다. Ruby 1.8에 녹색 스레드가있는 것은 사실이 아닙니다. Ruby Specification에는 녹색 스레드를 사용하도록하는 루비 사양이 없으며, 실제로 하나의 네이티브 스레드를 제외한 모든 Ruby 1.8 구현은 원시 스레드를 사용합니다. Ruby 1.9가 GIL을 가지고있는 것은 사실이 아닙니다. 다시 말하지만, Ruby 스펙에는 GIL을 구현하도록 강요하지 않으며 그 중 대부분은 GIL을 사용하지 않습니다. –

+0

요 르그 - 정확! 루비에 대해 이야기 할 때 나는 일반적으로 MRI (JRuby에는 적절한 스레딩 지원이 있음)를 의미했습니다. –

2

PHP는 현재 명시 적 스레드 사용을 지원하지 않습니다. PHP 서버가 다른 HTTP 요청을 처리하기 위해 스레드를 사용하거나 사용하지 않을 수도 있습니다 (Zend 엔진은 믿습니다). PHP 코드를 통해 스레드를 만들거나 조정할 수있는 기능이 없습니다.

5

이것은 스레딩을 원할 경우 선택할 수있는 두 가지 최악의 언어이지만, 실제로이 두 가지 중 하나를 원한다면 루비가 할 수 있다고 생각합니다. JRuby로 가보는 편이 낫다. JVM은 매우 우수한 스레딩을 수행합니다.

(또는 Rubyisms의 많은 기본적으로 자바입니다 그루비, 함께 할 것입니다.)

0

어느 당신이 시도하고있는 무슨 달성하는 좋은 방법이 될 수 있습니다.

"작업"의 비동기 처리에 대해서는 Gearman을 참조하십시오. 느슨하게 다른 서비스와 서비스를 연결하려는 경우 RabbitMQ과 같은 메시징 서비스가 필요합니다.

Gearman은 사용자의 요구에 맞을 것으로 보입니다.

관련 문제