2010-04-07 26 views
6

मैंने प्रत्येक 4 घंटे चलाने के लिए एक सीआरओएन नौकरी निर्धारित की है जिसे उपयोगकर्ता खातों की जानकारी इकट्ठा करने की आवश्यकता है। अब मैं चीजों को गति देना चाहता हूं और कई प्रक्रियाओं के बीच काम को विभाजित करना चाहता हूं और अन्य प्रक्रियाओं से पुनर्प्राप्त डेटा के साथ MySQL डीबी को अद्यतन करने के लिए एक प्रक्रिया का उपयोग करना चाहता हूं।PHP थ्रेड पूल?

जावा में मुझे पता है कि एक थ्रेड पूल है जिसे मैं कुछ काम पूरा करने के लिए कुछ धागे समर्पित कर सकता हूं।

मैं इसे PHP में कैसे कर सकता हूं?

कोई सलाह स्वागत है।

धन्यवाद

+0

क्रॉन नौकरी निष्पादित करता है? एक शेल स्क्रिप्ट और/या php स्क्रिप्ट और/या सर्वर अनुरोध जो सर्वर php स्क्रिप्ट चलाता है? – zaf

+0

एक PHP स्क्रिप्ट जो कुछ उपयोगकर्ता खातों के डेटा को पार्स करने के लिए कर्ल लाइब्रेरी का उपयोग करती है। – embedded

उत्तर

1

के रूप में अन्य लोगों ने कहा, प्रक्रियाओं forking पीएचपी साथ धागे को उत्पन्न करने की तुलना में आसान है। लेकिन आप क्यों सोचते हैं कि डेटाबेस को वापस लिखने के लिए एक समर्पित धागा होने का एक अच्छा विचार है? यद्यपि प्रक्रियाओं के बजाए धागे के साथ यह थोड़ा आसान है, फिर भी यह एक जटिल ओवरहेड है जो समग्र उद्देश्य के लिए कोई मूल्य नहीं दिखता है।

दरअसल, PHP कोड के भीतर से कांटा शुरू करने के बजाय क्रॉन से कई उदाहरणों (डेटा को विभाजित करने के लिए कुछ पैरामीटर के साथ) शुरू करने के लिए बहुत आसान है - और डेटा रिकॉर्ड करने के लिए किसी भी बाधा से परेशान नहीं डेटाबेस में वापस।

सी

+0

यह एक अच्छा विकल्प है जो आईएमओ प्रक्रियाओं की तुलना में काफी बेहतर है। क्या आपको कोई जानकारी है कि डेटा को कैसे विभाजित किया जाए और सिस्टम को ओवरहेड करने के लिए मुझे कितने उदाहरण नहीं चलाना चाहिए? मैं 3 उदाहरणों पर सोच रहा हूं। – embedded

+0

आपको जितने चाहें उतने उदाहरण। यदि डेटा अनुक्रम संख्या या कुछ अन्य संख्यात्मक द्वारा पहचाना जाता है तो प्रत्येक एनएच मामले प्राप्त करने के लिए एमओडी का उपयोग करें, उदा। 'चयन करें * एमओडी (आईडी, $ number_of_instances) = $ this_instance_id' (0 वें उदाहरण को चलाने के लिए याद रखें) – symcbean

+0

धन्यवाद मैं एमओडी विकल्प पर एक नज़र डालेगा। – embedded

6

पीएचपी शायद बहु सूत्रण के लिए सबसे उपयुक्त भाषा नहीं है।

आप विभिन्न समाधानों को देखना चाहते हैं। उदाहरण के लिए, Thrift आपको जावा बैक-एंड के साथ एक PHP फ्रंट-एंड बात करने की अनुमति देता है, जहां आप आसानी से अपने वांछित व्यवहार को कार्यान्वित कर सकते हैं।

आप अभी भी PHP में ऐसा करना चाहते हैं, तो आप को देखने के लिए चाहते हो सकता है:

http://www.php.net/pcntl

http://www.electrictoolbox.com/article/php/process-forking/

0

Chech इन पदों - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/

असल में आपको प्रक्रियाओं के बीच डेटा साझा करने की आवश्यकता है और जैसा कि मैंने देखा है, आपको शायद कुछ फाइलों को लिखना होगा प्रथम। मुख्य प्रक्रिया का उपयोग करके प्राप्त करें (इसे अजाक्स-मतदान प्रकार की प्रक्रिया बनाएं) और डीबी को लिखें।

+0

AJAX-मतदान प्रकार प्रक्रिया से आपका क्या मतलब है? मुझे लगता है कि मैं अपने पथ लेने के लिए और कुछ प्रक्रियाओं कांटा कार्य करते हैं और फाइल करने के लिए परिणाम संलग्न करने के लिए होगा। मुख्य प्रक्रिया सभी रिकॉर्ड फाइल में इस समय उपलब्ध लायेगा, फ़ाइल को साफ करता है और तो अवरोध समाप्त करने और उन्हें कार्रवाई करेंगे। मैं फाइल करने के लिए mulpile उपयोग रोकने के लिए समर्पित फ़ाइल पर एक ताला का प्रयोग करेंगे। इस व्यवहार के बारे में आप क्या सोचते हैं? – embedded

+0

वह व्यवहार बिल्कुल मेरे दिमाग में आता है। आपके मामले में, चूंकि यह क्रॉन-जॉब है, यह विशिष्ट अंतराल पर चल रहा है और फ़ाइल से डेटा एकत्र करेगा और फिर डीबी को लिखें। अजाक्स-मतदान एक वेबसर्वर दृष्टिकोण के लिए होगा जहां आप क्रॉन नौकरी के बजाय AJAX अनुरोध करने के लिए जावास्क्रिप्ट का उपयोग करते हैं। – pinaki

+0

मुझे लगता है कि मैं इसे कार्यान्वित करूँगा और जब मैं देखता हूं कि मेरे क्रॉन जॉब निष्पादन को 4 घंटे से अधिक समय लगता है। वेब होस्टिंग के मामले में मुझे यह सुनिश्चित करने की आवश्यकता है कि पीसीएनएलएल लाइब्रेरी सक्षम है? – embedded

0

तुम भी PHP में नई प्रक्रियाओं कांटा कर सकते हैं: pcntl_fork()

Btw। क्या वह स्क्रिप्ट 4 घंटे से अधिक समय तक चल रही है? अन्यथा मुझे कोई कारण नहीं दिखता कि इसे थ्रेड या प्रोसेस मैनेजमेंट के साथ जटिल क्यों करें।

+0

इसे गतिशील रूप से बदला जा सकता है। यह मेरी सेवा का उपयोग कर उपयोगकर्ताओं की संख्या पर निर्भर करता है। मैं इस तंत्र केवल जब स्क्रिप्ट निष्पादन से अधिक 4 घंटे हो जाएगा का उपयोग – embedded

2

PHP और थ्रेड (ये 2 शब्द) एक ही वाक्य में एक साथ नहीं जा सकते हैं। PHP थ्रेड समर्थन प्रदान नहीं करता है। आप pcntl फोर्किंग तंत्र या एसिंक्रोनस प्रोसेसिंग का प्रयास कर सकते हैं जो आपके मामले में सहायक नहीं है।

आप एक वर्कलोड वितरण तंत्र का उपयोग कर सकते हैं जो कि गियरमैन (आप इसे Google पर सुझाव देते हुए) देखकर चाहते हैं।

जैसा कि दूसरों द्वारा वर्णित किया गया है "यह एक वितरित फोर्किंग मशीन है" जो वर्कलोड वितरण प्रदान कर सकती है जिसे आप "चीजों को गति देने के लिए" ढूंढ रहे हैं।

संबंध है,

+0

मैं इसमें उसकी समीक्षा करेंगे करेंगे। क्या वेब होस्टिंग प्रदाता इस किट का समर्थन करते हैं? – embedded

+0

यह सिर्फ एक lib कि आप स्थापित है - सर्वर और ग्राहक - आप deamon को शुरू करने और आप प्रसंस्करण के लिए अनुरोध (अत्यधिक काम का बोझ के वितरण के लिए अनुशंसित) को स्वीकार करने के लिए तैयार हैं - http://gearman.org/ - जांच प्रस्तुतियों भी – Andreas

+0

मैं मुझे लगता है कि यह मेरी जरूरतों पर है। मैं अपने स्वयं के तंत्र को लागू करूंगा। धन्यवाद – embedded

0

आप इस लेख से पता चलता है कि सूत्रण अनुकरण करने के लिए कैसे, async HTTP कॉल का उपयोग एक धागा पूल प्रबंधक सहित, और एक वेब सर्वर की जाँच कर सकते हैं:

http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/

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