2013-03-01 11 views
7

में समांतर धागे निष्पादित नहीं कर रहा है मैं PHP के लिए pthreads एक्सटेंशन का उपयोग कर रहा हूं। जब मैं विंडोज़ पर cmd से PHP स्क्रिप्ट निष्पादित करता हूं तो मुझे समानांतर धागे मिलते हैं लेकिन जब मैं अपाचे से एक ही स्क्रिप्ट को कॉल करता हूं तो मुझे एक अलग परिणाम मिलता है और ऐसा लगता है कि मुझे सिंगल थ्रेड निष्पादन की तरह लगता है।PHP के लिए pthreads अपाचे

क्या कोई विन्यास है जिसे मुझे अपाचे के लिए cmd (समांतर) जैसे प्रतिक्रिया प्राप्त करने के लिए करना चाहिए?

Yoo World ----------<br> 
Yoo World ----------<br> 
Yoo World ----------<br> 
Standard <br> 
Standard <br> 
Yoo World ----------<br> 
Yoo Second -------------------------<br> 
Standard <br> 
Standard <br> 

वेब ब्राउज़र में:

अद्यतन:

class AsyncOperation extends Thread { 
    public function __construct($arg){ 
     $this->arg = $arg; 
    } 

    public function run(){ 
     if($this->arg){ 
      for($i = 0; $i < 50; $i++) { 
       echo "Yoo " . $this->arg . "<br>\n"; 
      } 
     } 
    } 
} 
$thread = new AsyncOperation("World ----------"); 
$thread2 = new AsyncOperation("Second -------------------------"); 
$thread->start(); 
$thread2->start(); 

for($i = 0; $i < 100; $i++) { 
    echo "Standard <br>\n"; 
} 

$thread->join(); 
$thread2->join(); 

उदाहरण कोड की तरह cmd में प्रतिक्रिया दे अलग-अलग ब्राउज़र मैं अलग परिणाम प्राप्त करें; यह समस्या बफर से संबंधित हो सकती है, जिसे मैं जांचने जा रहा हूं।

+1

क्या आपने कोशिश की है प्रत्येक एसिंक ऑपरेशन में 1 सेकंड नींद डालें? – Blacksonic

+0

परिणाम बहुत समान हैं। –

+0

आप इंटरमीस्ड स्ट्रिंग आउटपुट की अपेक्षा कर रहे थे? फिर थ्रेड फ़ंक्शन में स्ट्रिंग को विभाजित करें, पहले स्ट्रिंग आउटपुट को फिर कुछ मिलीसेक्स और आउटपुट दूसरी स्ट्रिंग के लिए सोएं। – SparKot

उत्तर

2

कुछ भी अनुकरण नहीं किया गया है, आप असली धागे निष्पादित कर रहे हैं।

आपको एसएपीआई मोड में धागे से मानक आउटपुट नहीं लिखना चाहिए, आपको अप्रत्याशित व्यवहार और त्रुटियों का अनुभव होगा, जिन्हें नियंत्रित नहीं किया जा सकता है, बहुत सारे वातावरण और एसएपीआई इसे अच्छी तरह से कवर करने के लिए हैं, इसलिए यह बिल्कुल कवर नहीं है, ऐसा मत करो

यहां तक ​​कि जटिल कोड के सीएलआई मोड आउटपुट में भी घूमने के लिए, इस के आसपास काम करने के लिए, आप किसी भी ऑब्जेक्ट में एक संरक्षित विधि को परिभाषित कर सकते हैं जो आप सभी संदर्भों को पारित करते हैं जो मानक आउटपुट लिखने की देखभाल करते हैं, यदि विधि सुरक्षित है और ऑब्जेक्ट एक pthreads है, केवल एक संदर्भ एक समय में मानक आउटपुट लिखने में सक्षम हो जाएगा ... एक ही ऑब्जेक्ट का उपयोग लॉगिंग डेटाबेस के लिए मानक आउटपुट स्वैप करके एसएपीआई पर्यावरण में किया जा सकता है ...

+0

क्या आपके पास कोई उदाहरण कोड है जहां मैं देख सकता हूं कि यह कैसे करना है? मेरा मतलब है कि अगर कोई अच्छा अभ्यास विषय है तो मैं उन्हें पढ़ना चाहूंगा। –

+1

http: // stackoverflow।कॉम/ए/14565559/1658631 में एक उदाहरण है जहां संरक्षित तरीकों का उपयोग करके कंसोल आउटपुट सिंक्रनाइज़ किया जाता है, विभिन्न प्रकार के विषयों को कवर करने वाले पर्थ्रेड के वितरण में कई उदाहरण शामिल हैं। –

+0

@EmrahMehmedov आप परिणाम को ढेर करने के लिए भी डुबो सकते हैं और प्रत्येक चरण को देखने के लिए print_r का उपयोग कैसे कर सकते हैं .... कुछ भी नकल नहीं किया जाता है – Baba

संबंधित मुद्दे