मैं PHP में pcntl_fork
के बारे में उलझन में हूं।PHP में pcntl_fork कैसे काम करता है?
मुझे पता है कि यह बहु-थ्रेडिंग करता है, लेकिन यह कैसे काम करता है और मैं इसे स्क्रिप्ट में कैसे उपयोग करूं?
मैं PHP में pcntl_fork
के बारे में उलझन में हूं।PHP में pcntl_fork कैसे काम करता है?
मुझे पता है कि यह बहु-थ्रेडिंग करता है, लेकिन यह कैसे काम करता है और मैं इसे स्क्रिप्ट में कैसे उपयोग करूं?
पीसीएनटीएल धागे नहीं बना सकता है। यह केवल वर्तमान PHP प्रक्रिया "फोर्क" है। इसका क्या मतलब है? जब आप pcntl_fork()
पर कॉल करते हैं, तो वर्तमान प्रक्रिया को दो प्रक्रियाओं में विभाजित किया जाता है। मूल प्रक्रिया के पूरे नामस्थान को बच्चे में कॉपी किया गया है और दोनों प्रक्रियाएं केवल एक अंतर के साथ समानांतर में निष्पादन के साथ जारी रहती हैं: pcntl_fork()
बच्चे में बच्चे के पीआईडी और बच्चे में 0
लौटाता है।
कुछ संकेत:
MySQL server has gone away
जैसी त्रुटियां मिलेंगी।यहाँ उदाहरण from documentation है:
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
लेकिन याद रखें, पीएचपी सिर्फ भाषा को स्क्रिप्ट है। यह समांतर कंप्यूटिंग के लिए डिज़ाइन नहीं किया गया है। आप अपनी आवश्यकताओं के आधार पर, सीआरओएन, संदेश कतार या निम्न स्तर की भाषा में प्रोग्राम के साथ बेहतर काम कर सकते हैं।
फोर्क किए गए PHP प्रोग्राम को पढ़ने, समझने और डीबग करने में बहुत मुश्किल है। उस कार्यक्रम को बनाए रखना एक दुःस्वप्न होगा।
गलती मत करो और फोर्किंग से बचें। आपको इसकी आवश्यकता नहीं है आपको वास्तव में क्या चाहिए अतुल्यकालिक कार्य धावक है। अच्छी खबर है, वहाँ है RabbitMQ और nice tutorial ;-) तुम भी RabbitMQ पुस्तकालय का वादा कोशिश कर सकते हैं कहा जाता Bunny
पुनश्च: का उपयोग करते हुए संदेश कतार बजाय forking आप एक और लाभ देता है। आप कई सर्वरों के साथ कतार को संसाधित कर सकते हैं और क्षैतिज रूप से स्केल कर सकते हैं क्योंकि आपका ट्रैफ़िक बढ़ता है।
धन्यवाद आपका उत्तर मेरी मदद करता है :) –
देखें http://stackoverflow.com/q/19546588/632951 – Pacerier