मुझे यह PECL पैकेज थ्रेड्स के नाम से मिला , लेकिन अभी तक कोई रिलीज़ नहीं हुआ है। और PHP वेबसाइट पर कुछ भी नहीं आ रहा है।
मुझे यह PECL पैकेज थ्रेड्स के नाम से मिला , लेकिन अभी तक कोई रिलीज़ नहीं हुआ है। और PHP वेबसाइट पर कुछ भी नहीं आ रहा है।
जवाबों:
ऐसा कुछ भी उपलब्ध नहीं है जिससे मैं अवगत हूं। अगली सबसे अच्छी बात यह होगी कि सीएलआई के माध्यम से एक स्क्रिप्ट को दूसरे को निष्पादित किया जाए, लेकिन यह थोड़ा अशिष्ट है। आप क्या करने की कोशिश कर रहे हैं और यह कितना जटिल है, इसके आधार पर, यह एक विकल्प हो सकता है या नहीं भी हो सकता है।
Pthreads एक्सटेंशन के लिए PHP मैनुअल से :
pthreads एक ऑब्जेक्ट ओरिएंटेड एपीआई है जो PHP में उपयोगकर्ता-भूमि मल्टी-थ्रेडिंग की अनुमति देता है। इसमें वेब या कंसोल पर लक्षित बहु-थ्रेडेड एप्लिकेशन बनाने के लिए आवश्यक सभी उपकरण शामिल हैं। PHP एप्लिकेशन थ्रेड्स, वर्कर्स और स्टैकेबल्स के साथ बना, पढ़, लिख, निष्पादित और सिंक्रनाइज़ कर सकते हैं।
जैसा कि अविश्वसनीय लगता है, यह पूरी तरह सच है। आज, PHP उन लोगों के लिए बहु-धागा कर सकता है जो इसे आज़माना चाहते हैं।
PHP4 की पहली रिलीज़, 22 मई 2000, PHP को थ्रेड सेफ़ आर्किटेक्चर के साथ भेज दिया गया था - इसके लिए मल्टी-थ्रेडेड SAPI (सर्वर API) वातावरण में अलग-अलग थ्रेड्स में दुभाषिया के कई उदाहरणों को निष्पादित करने का एक तरीका है। पिछले 13 वर्षों में, इस वास्तुकला के डिजाइन को बनाए रखा गया है और उन्नत किया गया है: यह अब तक दुनिया की सबसे बड़ी वेबसाइटों पर उत्पादन उपयोग में रहा है।
उपयोगकर्ता भूमि में थ्रेडिंग कभी भी PHP टीम के लिए चिंता का विषय नहीं था, और आज भी ऐसा ही है। आपको यह समझना चाहिए कि दुनिया में जहां PHP यह व्यवसाय है, वहां पहले से ही स्केलिंग का एक परिभाषित तरीका है - हार्डवेयर जोड़ें। कई वर्षों से PHP अस्तित्व में है, हार्डवेयर सस्ता और सस्ता हो गया है और इसलिए यह PHP टीम के लिए कम और चिंता का विषय बन गया है। जबकि यह सस्ता हो रहा था, यह भी अधिक शक्तिशाली हो गया; आज, हमारे मोबाइल फोन और टैबलेट में दोहरे और क्वाड कोर आर्किटेक्चर हैं और इसके साथ जाने के लिए बहुत सारे रैम हैं, हमारे डेस्कटॉप और सर्वर में आमतौर पर 8 या 16 कोर, 16 और 32 गीगाबाइट रैम होते हैं, हालांकि हम हमेशा दो नहीं कर सकते हैं बजट के भीतर और दो डेस्कटॉप होने से शायद ही हम में से अधिकांश के लिए उपयोगी है।
इसके अतिरिक्त, PHP को गैर-प्रोग्रामर के लिए लिखा गया था, यह कई शौकीनों की मूल भाषा है। PHP इतनी आसानी से अपनाया जाता है इसका कारण यह है कि यह सीखना और लिखना एक आसान भाषा है। आज PHP इतना विश्वसनीय है क्योंकि काम की विशाल मात्रा के कारण यह डिजाइन में है, और PHP समूह द्वारा किए गए हर एक निर्णय। यह विश्वसनीयता है और सरासर महानता को इन सभी वर्षों के बाद, स्पॉट लाइट में रखना है; जहाँ यह प्रतिद्वंद्वी समय या दबाव में गिर गया है।
मल्टी-थ्रेडेड प्रोग्रामिंग सबसे सुसंगत और विश्वसनीय एपीआई के साथ भी आसान नहीं है, इसके बारे में सोचने के लिए अलग-अलग चीजें हैं, और कई गलत धारणाएं हैं। PHP समूह उपयोगकर्ता भूमि मल्टी-थ्रेडिंग के लिए एक मुख्य विशेषता होने की कामना नहीं करता है, इसे कभी भी गंभीर ध्यान नहीं दिया गया है - और ठीक ही तो। हर किसी के लिए PHP जटिल नहीं होनी चाहिए।
सभी चीजों पर विचार किया गया है, अभी भी लाभ हैं जो PHP को उत्पादन के उपयोग के लिए तैयार और परीक्षण सुविधाओं का उपयोग करने की अनुमति देता है, जो हमारे पास सबसे अधिक बनाने का साधन है, जब अधिक जोड़ना हमेशा एक विकल्प नहीं होता है, और बहुत कुछ के लिए। कार्यों की वास्तव में कभी जरूरत नहीं होती है।
pthreads प्राप्त करता है, इसे तलाशने के इच्छुक लोगों के लिए, एक एपीआई जो एक उपयोगकर्ता को बहु-थ्रेड PHP अनुप्रयोगों की अनुमति देता है। यह एपीआई बहुत प्रगति पर काम है, और स्थिरता और पूर्णता के एक बीटा स्तर को नामित किया है।
यह सामान्य ज्ञान है कि पुस्तकालयों के कुछ PHP उपयोग धागे सुरक्षित नहीं हैं, यह प्रोग्रामर को स्पष्ट होना चाहिए कि pthreads इसे बदल नहीं सकते हैं, और प्रयास करने का प्रयास नहीं करते हैं। हालाँकि, कोई भी लाइब्रेरी जो थ्रेड सुरक्षित है, वह प्रयोग करने योग्य है, जैसा कि दुभाषिया के किसी अन्य थ्रेड सुरक्षित सेटअप में है।
pthreads पॉज़िक्स थ्रेड्स का उपयोग करता है (विंडोज में भी), प्रोग्रामर जो भी बनाता है, निष्पादन के असली धागे हैं, लेकिन उन थ्रेड्स को उपयोगी होने के लिए, उन्हें PHP के बारे में पता होना चाहिए - उपयोगकर्ता कोड निष्पादित करने में सक्षम, चर साझा करने और संचार के एक उपयोगी साधन की अनुमति दें ( तादात्म्य )। इसलिए प्रत्येक थ्रेड दुभाषिया के एक उदाहरण के साथ बनाया गया है, लेकिन डिज़ाइन के अनुसार, यह दुभाषिया दुभाषिया के अन्य सभी उदाहरणों से अलग है - बस बहु-थ्रेडेड सर्वर एपीआई वातावरण की तरह। pthreads एक सुरक्षित और सुरक्षित तरीके से अंतर को पाटने का प्रयास करता है। सी में थ्रेडर्स के प्रोग्रामर की बहुत सी चिंताएं केवल पायथर्स के प्रोग्रामर के लिए नहीं हैं, डिजाइन द्वारा, पाइथ्स को पढ़ने पर कॉपी किया जाता है और राइट ऑन कॉपी (RAM सस्ता होता है), इसलिए कोई भी दो उदाहरण कभी भी एक ही भौतिक डेटा में हेरफेर नहीं करते हैं। , लेकिन वे दोनों एक और धागे में डेटा को प्रभावित कर सकते हैं।
पढ़ने पर कॉपी और लिखने पर कॉपी क्यों:
public function run() {
...
(1) $this->data = $data;
...
(2) $this->other = someOperation($this->data);
...
}
(3) echo preg_match($pattern, $replace, $thread->data);
(1) जबकि एक रीड, और राइट लॉक, पॉट्रेड्स ऑब्जेक्ट डेटा स्टोर पर आयोजित किए जाते हैं, डेटा को मेमोरी स्टोर में ऑब्जेक्ट में मूल स्थान से कॉपी किया जाता है। pthreads चर के प्रतिक्षेप को समायोजित नहीं करता है, Zend मूल डेटा को मुक्त करने में सक्षम है यदि इसके आगे संदर्भ नहीं हैं।
(2) कुछ ओपरेशन का तर्क ऑब्जेक्ट स्टोर, मूल डेटा को संग्रहीत करता है, जिसे वह (1) के परिणाम की एक प्रति के रूप में संदर्भित करता है, इंजन के लिए फिर से एक ज़वल कंटेनर में कॉपी किया जाता है, जबकि ऐसा तब होता है जब एक रीड लॉक ऑन होता है ऑब्जेक्ट स्टोर, लॉक जारी किया गया है और इंजन फ़ंक्शन को निष्पादित कर सकता है। जब ज़वल बनाया जाता है, तो इसमें 0 का एक रिफकाउंट होता है, जो इंजन को ऑपरेशन के पूरा होने पर कॉपी को मुक्त करने में सक्षम बनाता है, क्योंकि इसका कोई अन्य संदर्भ मौजूद नहीं है।
(3) डेटा स्टोर को प्रीग_मैच के संदर्भ में अंतिम तर्क दिया गया है, एक रीड लॉक प्राप्त किया गया है, (1) में सेट किए गए डेटा को फिर से एक ज़ेवल पर कॉपी किया जाता है, फिर से 0. के रिफंड के साथ। लॉक जारी किया जाता है, प्रीग_चैट पर कॉल चालू होता है डेटा की एक प्रति, वह स्वयं मूल डेटा की एक प्रति है।
जानने योग्य बातें:
ऑब्जेक्ट स्टोर की हैश तालिका जहां डेटा संग्रहीत किया जाता है, थ्रेड सुरक्षित है,
Zend द्वारा PHP के साथ भेजे गए TsHashTable पर आधारित है।
ऑब्जेक्ट स्टोर में एक रीड एंड राइट लॉक होता है, TsHashTable के लिए एक अतिरिक्त एक्सेस लॉक प्रदान किया जाता है, जैसे कि अगर आवश्यकता होती है (और यह करता है, var_dump / print_r, गुणों तक सीधी पहुंच के रूप में PHP इंजन उन्हें संदर्भित करना चाहता है) pthreads TsHashTable में हेरफेर कर सकता है परिभाषित एपीआई के बाहर।
ताले केवल तभी आयोजित किए जाते हैं जब प्रतिलिपि कार्य होते हैं, जब प्रतियां बना दी जाती हैं, तो ताले को एक समझदार क्रम में जारी किया जाता है।
इसका मतलब है की:
जब कोई लेखन होता है, तो न केवल एक पढ़ने और लिखने वाला लॉक होता है, बल्कि एक अतिरिक्त एक्सेस लॉक होता है। तालिका स्वयं बंद है, कोई अन्य संदर्भ लॉक, पढ़ने, लिखने या उसे प्रभावित करने का कोई संभव तरीका नहीं है।
जब कोई रीड होता है, तो न केवल रीड लॉक आयोजित होता है, बल्कि अतिरिक्त एक्सेस लॉक भी होता है, फिर से टेबल लॉक हो जाता है।
कोई भी दो संदर्भ भौतिक या समवर्ती रूप से ऑब्जेक्ट स्टोर से समान डेटा तक नहीं पहुंच सकते हैं, लेकिन किसी संदर्भ में किसी संदर्भ में किसी भी संदर्भ में पढ़े गए डेटा को प्रभावित करेगा।
यह कुछ भी नहीं वास्तुकला साझा किया जाता है और अस्तित्व का एकमात्र तरीका सह-अस्तित्व है। जो थोड़ा समझदार हैं वे देखेंगे, यहां बहुत सारी नकल चल रही है, और वे आश्चर्यचकित होंगे कि क्या यह अच्छी बात है। काफी नकल एक गतिशील क्रम के भीतर चलती है, यह एक गतिशील भाषा की गतिशीलता है। ऑब्जेक्ट के स्तर पर pthreads कार्यान्वित किया जाता है, क्योंकि एक वस्तु पर अच्छा नियंत्रण प्राप्त किया जा सकता है, लेकिन प्रोग्रामर जिस कोड को निष्पादित करता है - उसका एक और संदर्भ होता है, जो लॉकिंग और कॉपियों से मुक्त होता है - स्थानीय विधि क्षेत्र। Pthreads ऑब्जेक्ट के मामले में ऑब्जेक्ट स्कोप को संदर्भों के बीच डेटा साझा करने के तरीके के रूप में माना जाना चाहिए, यह उद्देश्य है। इसे ध्यान में रखते हुए आप ऑब्जेक्ट स्टोर को लॉक करने से बचने के लिए तकनीकों को अपना सकते हैं जब तक कि यह आवश्यक न हो,
PHP के लिए उपलब्ध अधिकांश पुस्तकालयों और एक्सटेंशन 3 जी पार्टियों के आसपास पतले रैपर हैं, एक हद तक PHP कोर कार्यक्षमता एक ही बात है। पोज़िक्स पॉज़िक्स थ्रेड्स के चारों ओर एक पतली आवरण नहीं है; यह पॉसिक्स थ्रेड्स पर आधारित एक थ्रेडिंग एपीआई है। PHP में थ्रेड्स को लागू करने का कोई मतलब नहीं है कि यह उपयोगकर्ताओं को समझ में नहीं आता है या उपयोग नहीं कर सकता है। ऐसा कोई कारण नहीं है कि एक म्यूटेक्स के बारे में कोई भी जानकारी रखने वाला व्यक्ति कौशल या संसाधनों के मामले में उन सभी का लाभ उठाने में सक्षम नहीं होना चाहिए जो उनके पास हैं। एक ऑब्जेक्ट एक ऑब्जेक्ट की तरह कार्य करता है, लेकिन जहां भी दो संदर्भ अन्यथा टकराएंगे, pthreads स्थिरता और सुरक्षा प्रदान करता है।
जिस किसी ने जावा में काम किया है वह pthreads ऑब्जेक्ट और जावा में थ्रेडिंग के बीच समानता को देखेगा, उन्हीं लोगों को इसमें कोई संदेह नहीं होगा, जिसे ConcurrentModificationException नाम की त्रुटि दिखाई दे रही है - क्योंकि यह जावा रनटाइम द्वारा उठाई गई एक त्रुटि लगती है, जबकि दो थ्रेड्स एक ही भौतिक डेटा लिखते हैं समवर्ती। मैं समझता हूं कि यह क्यों मौजूद है, लेकिन यह मुझे चकित करता है कि संसाधनों के रूप में सस्ते के रूप में वे हैं, इस तथ्य के साथ मिलकर रनटाइम सही और केवल उस समय में संगणक का पता लगाने में सक्षम है जो उपयोगकर्ता के लिए सुरक्षा हासिल कर सकता है, कि यह चुनता है डेटा के निष्पादन और पहुंच को प्रबंधित करने के बजाय रनटाइम पर संभवतः एक घातक त्रुटि फेंकें।
ऐसा कोई भी बेवकूफ त्रुटियों pthreads द्वारा उत्सर्जित नहीं किया जाएगा, API को थ्रेडिंग को स्थिर बनाने के लिए लिखा गया है, और संभव के रूप में संगत है, मुझे विश्वास है।
मल्टी-थ्रेडिंग एक नए डेटाबेस का उपयोग करने की तरह नहीं है, मैनुअल में हर शब्द पर ध्यान दिया जाना चाहिए और pthreads के साथ भेजे गए उदाहरण।
अंत में, PHP मैनुअल से:
pthreads था, और है, बहुत अच्छे परिणाम के साथ एक प्रयोग। किसी भी समय इसकी कोई सीमा या सुविधाएँ बदल सकती हैं; वह प्रयोग की प्रकृति है। यह सीमाएँ हैं - अक्सर कार्यान्वयन द्वारा लगाए गए - अच्छे कारण के लिए मौजूद हैं; pthreads का उद्देश्य किसी भी स्तर पर PHP में मल्टी-टास्किंग के लिए एक उपयोगी समाधान प्रदान करना है। जिस वातावरण में pthreads निष्पादित करता है, स्थिर वातावरण प्रदान करने के लिए कुछ प्रतिबंध और सीमाएं आवश्यक हैं।
यहाँ विल्को ने जो सुझाव दिया उसका एक उदाहरण है:
$cmd = 'nohup nice -n 10 /usr/bin/php -c /path/to/php.ini -f /path/to/php/file.php action=generate var1_id=23 var2_id=35 gen_id=535 > /path/to/log/file.log & echo $!';
$pid = shell_exec($cmd);
मूल रूप से यह कमांड लाइन पर PHP स्क्रिप्ट को निष्पादित करता है, लेकिन तुरंत पीआईडी को वापस कर देता है और फिर पृष्ठभूमि में चलता है। (गूंज $! सुनिश्चित करता है कि पीआईडी के अलावा और कुछ नहीं लौटाया जाए।) इससे आपकी PHP स्क्रिप्ट जारी रह सकती है या यदि आप चाहें तो इसे छोड़ सकते हैं। जब मैंने इसका उपयोग किया है, तो मैंने उपयोगकर्ता को दूसरे पृष्ठ पर रीडायरेक्ट किया है, जहां हर 5 से 60 सेकंड में एक AJAX कॉल किया जाता है ताकि यह जांचा जा सके कि रिपोर्ट अभी भी चल रही है। (मेरे पास gen_id और इसके संबंधित उपयोगकर्ता को संग्रहीत करने के लिए एक तालिका है।) चेक स्क्रिप्ट निम्न चलती है:
exec('ps ' . $pid , $processState);
if (count($processState) < 2) {
// less than 2 rows in the ps, therefore report is complete
}
इस तकनीक पर एक छोटी पोस्ट यहाँ है: http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/
संक्षेप में: हाँ, php में मल्टीथ्रेडिंग है लेकिन आपको इसके बजाय मल्टीप्रोसेसिंग का उपयोग करना चाहिए।
हमेशा थ्रेड्स और प्रक्रियाओं के भेद के बारे में थोड़ा भ्रम होता है, इसलिए मैं जल्द ही दोनों का वर्णन करूंगा:
आप php के साथ नई प्रक्रियाओं (जिसमें एक नया धागा भी शामिल है) बनाकर समानांतर कंप्यूटिंग प्राप्त कर सकते हैं। यदि आपके थ्रेड्स को अधिक संचार या सिंक्रनाइज़ेशन की आवश्यकता नहीं है, तो यह आपकी पसंद है, क्योंकि प्रक्रियाएं अलग-थलग हैं और एक-दूसरे के काम में हस्तक्षेप नहीं कर सकती हैं। यहां तक कि अगर एक दुर्घटना, दूसरों की चिंता नहीं है। यदि आपको अधिक संचार की आवश्यकता है, तो आपको "मल्टीथ्रेडिंग" पर पढ़ना चाहिए या - दुख की बात है - किसी अन्य प्रोग्रामिंग भाषा का उपयोग करने पर विचार करें, क्योंकि अंतर-प्रक्रिया संचार और सिंक्रनाइज़ेशन बहुत जटिलता का परिचय देता है।
Php में आपके पास नई प्रक्रिया बनाने के दो तरीके हैं:
ओएस को आपके लिए करने दें : आप अपने ऑपरेशन सिस्टम को एक नई प्रक्रिया बनाने और उसमें एक नई (या समान) php स्क्रिप्ट चलाने के लिए कह सकते हैं।
के लिए linux आप निम्नलिखित का उपयोग करें या विचार कर सकते हैं डैरिल हेन के जवाब :
$cmd = 'nice php script.php 2>&1 & echo $!';
pclose(popen($cmd, 'r'));
के लिए खिड़कियों आप इसका उपयोग कर सकते:
$cmd = 'start "processname" /MIN /belownormal cmd /c "script.php 2>&1"';
pclose(popen($cmd, 'r'));
एक कांटा के साथ यह खुद करो : php भी फ़ंक्शन pcntl_fork () के माध्यम से forking का उपयोग करने की संभावना प्रदान करता है । यह कैसे करना है पर एक अच्छा ट्यूटोरियल यहां पाया जा सकता है लेकिन मैं दृढ़ता से इसका उपयोग नहीं करने की सलाह देता हूं, क्योंकि कांटा मानवता के खिलाफ और विशेष रूप से ऊप के खिलाफ अपराध है ।
मल्टीथ्रेडिंग के साथ आपके सभी धागे अपने संसाधनों को साझा करते हैं ताकि आप आसानी से बहुत अधिक ओवरहेड के बीच संवाद कर सकें और उन्हें सिंक्रनाइज़ कर सकें। दूसरी तरफ आपको यह जानना होगा कि आप क्या कर रहे हैं, क्योंकि दौड़ की स्थिति और गतिरोध पैदा करना आसान है लेकिन डिबग करना बहुत मुश्किल है।
मानक php कोई मल्टीथ्रेडिंग प्रदान नहीं करता है लेकिन एक (प्रायोगिक) विस्तार है जो वास्तव में करता है - pthreads । इसके एपीआई प्रलेखन ने भी इसे php.net में बनाया । इसके साथ आप कुछ सामान कर सकते हैं जैसा कि आप वास्तविक प्रोग्रामिंग भाषाओं में कर सकते हैं :-) इस तरह से:
class MyThread extends Thread {
public function run(){
//do something time consuming
}
}
$t = new MyThread();
if($t->start()){
while($t->isRunning()){
echo ".";
usleep(100);
}
$t->join();
}
लिनक्स के लिए स्टैकओवरफ्लो में यहीं एक इंस्टॉलेशन गाइड है ।
खिड़कियों के लिए अब एक है:
[PhpDirectory] /php.ini संपादित करें और निम्नलिखित पंक्ति डालें
extension=php_pthreads.dll
ऊपर की स्क्रिप्ट के साथ इसे कुछ नींद या कुछ के साथ परीक्षण करें जहां टिप्पणी है।
और अब बड़ा BUT : हालाँकि यह वास्तव में काम करता है, php मूल रूप से मल्टीथ्रेडिंग के लिए नहीं बनाया गया था। इसमें php का थ्रेड-सुरक्षित संस्करण मौजूद है और v5.4 के रूप में यह लगभग बग-मुक्त प्रतीत होता है, लेकिन बहु-थ्रेडेड वातावरण में php का उपयोग करना अभी भी php मैनुअल में हतोत्साहित किया जाता है (लेकिन शायद उन्होंने अभी अपने मैनुअल को अपडेट नहीं किया है यह, अभी तक)। एक बहुत बड़ी समस्या यह हो सकती है कि बहुत सारे सामान्य एक्सटेंशन थ्रेड-सुरक्षित नहीं हैं । तो आप इस php एक्सटेंशन के साथ थ्रेड प्राप्त कर सकते हैं, लेकिन आप जिन कार्यों पर निर्भर हैं, वे अभी भी थ्रेड-सुरक्षित नहीं हैं, इसलिए आप शायद रेस की स्थिति, गतिरोध और कोड में आपका सामना नहीं करेंगे।
धागे के समान कुछ हासिल करने के लिए आप pcntl_fork () का उपयोग कर सकते हैं । तकनीकी रूप से यह अलग-अलग प्रक्रियाएं हैं, इसलिए दोनों के बीच संचार थ्रेड्स के साथ सरल नहीं है, और मेरा मानना है कि अगर पीएचपी को अपाचे द्वारा बुलाया जाता है तो यह काम नहीं करेगा।
अगर किसी को परवाह है, तो मैंने php_threading को पुनर्जीवित किया है (थ्रेड्स के समान नहीं, लेकिन समान) और मेरे पास वास्तव में यह उस बिंदु पर है जहां यह (कुछ) अच्छी तरह से काम करता है!
pcntl_fork()
वह है जो आप खोज रहे हैं, लेकिन इसकी प्रक्रिया थ्रेडिंग नहीं है। इसलिए आपको डेटा एक्सचेंज की समस्या होगी। उन्हें हल करने के लिए आप phps semaphore फ़ंक्शंस का उपयोग कर सकते हैं ( http://www.php.net/manual/de/ref.sem.php ) का संदेश कतार साझा स्मृति खंडों की तुलना में शुरुआत के लिए थोड़ा आसान हो सकता है।
वैसे भी, एक रणनीति मैं एक वेब फ्रेमवर्क में उपयोग कर रहा हूं जो मैं विकसित कर रहा हूं जो एक वेब पेज के संसाधन गहन ब्लॉकों को लोड करता है (संभवतः बाहरी अनुरोधों के साथ) समानांतर: मैं यह जानने के लिए एक नौकरी कतार में कर रहा हूं कि मैं किस डेटा का इंतजार कर रहा हूं और फिर मैं कांटा हर प्रक्रिया के लिए नौकरी बंद। एक बार जब वे एपीसी कैश में अपने डेटा को एक अनोखी कुंजी के तहत संग्रहित करते हैं तो अभिभावक प्रक्रिया तक पहुँच सकते हैं। एक बार हर डेटा के बाद यह जारी है। मैं सरल का उपयोग कर रहा हूं।usleep()
प्रतीक्षा करने के लिए का क्योंकि अपाचे में अंतर प्रक्रिया संचार संभव नहीं है (बच्चे अपने माता-पिता से संबंध ढीले कर देंगे और लाश बन जाएंगे ...)। इसलिए यह मुझे आखिरी बात पर ले जाता है: हर बच्चे को मारने के लिए इसका महत्वपूर्ण हिस्सा! वहाँ के रूप में अच्छी तरह से कक्षाएं हैं जो कांटा प्रक्रियाओं लेकिन डेटा रखने के लिए, मैं उन्हें जांच नहीं किया, लेकिन zend फ्रेमवर्क एक है, और वे आम तौर पर धीमी लेकिन मज़बूती से कोड करते हैं। आप इसे यहां देख सकते हैं:
http://zendframework.com/manual/1.9/en/zendx.console.process.unix.overview.html
मुझे लगता है कि वे shm सेगमेंट का उपयोग करते हैं! अच्छी तरह से अंतिम लेकिन कम से कम इस zend वेबसाइट पर कोई त्रुटि नहीं है, उदाहरण में मामूली गलती।
while ($process1->isRunning() && $process2->isRunning()) {
sleep(1);
}
should of course be:
while ($process1->isRunning() || $process2->isRunning()) {
sleep(1);
}
PThreads के आधार पर एक थ्रेडिंग विस्तार किया जा रहा है जो एक्टीली विकसित किया गया है जो https://github.com/krakjoe/pthreads पर बहुत आशाजनक लगता है
बस एक अद्यतन, ऐसा लगता है कि PHP लोग थ्रेड और अब उपलब्ध समर्थन पर काम कर रहे हैं।
इसका लिंक यहां दिया गया है: http://php.net/manual/en/book.pthreads.php
मेरे पास एक PHP थ्रेडिंग क्लास है जो दो साल से अधिक समय से प्रोडक्शन के माहौल में बेकार चल रहा है।
EDIT: यह अब एक कंपोजर लाइब्रेरी के रूप में और मेरे MVC फ्रेमवर्क, हज़ार MVC के हिस्से के रूप में उपलब्ध है।
मुझे पता है कि यह एक पुराना सवाल है, लेकिन आप http://phpthreadlib.sourceforge.net/ पर देख सकते हैं
द्वि-दिशात्मक संचार, Win32 के लिए समर्थन और कोई एक्सटेंशन की आवश्यकता नहीं है।
कभी appserver
तकनीक के बारे में सुना है ?
यह php में लिखा गया है और उच्च ट्रैफ़िक php अनुप्रयोगों के लिए मल्टीथ्रेड्स को प्रबंधित करने वाले एक प्रशिक्षक के रूप में काम करता है। अभी भी बीटा में है लेकिन बहुत आशाजनक है।
बल्कि अस्पष्ट है, और जल्द ही पदावनत किया जाना है, जिसे टिक कहा जाता है । केवल एक चीज जिसे मैंने कभी इसके लिए उपयोग किया है, वह है स्क्रिप्ट को SIGKILL (Ctrl + C) पर कब्जा करने और इनायत से बंद करने की अनुमति देना।
pcntl_fork()
) अपाचे से बुलाया जाएगा तो काम करेगा?