2011-12-22 15 views
5

मेरे पास PHP के साथ वेब अनुप्रयोगों के विकास के कई वर्षों का अनुभव है और मैंने जावा के साथ भी काम किया है (हालांकि वेब अनुप्रयोग विकास के लिए कभी नहीं)। मैं एक बड़ी परियोजना को पूरा कर रहा हूं जिसे मैं पिछले छह महीनों से PHP/CodeIgniter में बनाया गया है और क्लाउडकंट्रोल के साथ होस्ट किया गया है (स्वचालित सर्वर प्रावधान और स्केलेबिलिटी प्रदान करता है)।एक PHP डेवलपर से वेब विकास के लिए जावा के बारे में प्रश्न

प्रोजेक्ट अच्छी तरह से चला गया है, और PHP ने मेरी ज़रूरतें पूरी की हैं - लेकिन अब मैं एक वेब एप्लिकेशन विकसित करने के शुरुआती चरण में हूं जो एंटरप्राइज़ उपयोगकर्ताओं के लिए लक्षित होगा और मैं जावा (संभवतः 'Grails') का उपयोग करने पर विचार कर रहा हूं। एडब्ल्यूएस लोचदार बीनस्टॉक के संयोजन के साथ।

मेरा पहला सवाल यह है: बहु-थ्रेडिंग, जावा के लिए वेब अनुप्रयोग विकास में इसका कितनी बार उपयोग किया जाता है? मेरे PHP ऐप के साथ, मेरे सर्वर को उपयोगकर्ता के अनुरोध के जवाब में फेसबुक पर एपीआई कॉल करने की आवश्यकता हो सकती है (उपयोगकर्ता की दीवार पर पोस्ट कहें)। उपयोगकर्ता पर लौटने से पहले मेरी PHP प्रक्रिया एपीआई कॉल पर पूरा होने से बचने के लिए, मैंने गियरमैन जॉब क्यूइंग सर्वर w/श्रमिकों को अपने प्राथमिक एप्लिकेशन सर्वर से पृष्ठभूमि कार्यकर्ता को काम को ऑफ़लोड करने के लिए उपयोग किया।

क्या जावा डेवलपर बस एपीआई कॉल को संभालने के लिए थ्रेड को स्पिन करेगा और मुख्य प्रक्रिया उपयोगकर्ता को वापस कर देगी? क्या यह PHP पर जावा विकास की सबसे बड़ी ताकत है? धन्यवाद!

+1

मैं थोड़ी देर के लिए दोनों भाषाओं के साथ खुद को खिला रहा हूं। मेरी बहुत नम्र राय है: जावा की ताकत एपीआई और पुस्तकालयों की उपलब्धता है। PHP के लिए प्रोटोटाइप या कार्यात्मक संस्करण बनाने की गति है। अभी मुझे देखो, मैंने अभी तक एक नई परियोजना के लिए जावा चुना है क्योंकि मुझे पता था कि मैं PHPExcel के बजाय अपाचे पीओआई का उपयोग कर सकता हूं ... आलस्य की तरह। :) – Alfabravo

+1

मुझे पता है कि नए धागे को बढ़ाने की क्षमता एक PHP डेवलपर (जैसे स्वयं) के लिए एक नवीनता है और इस अच्छी सुविधा का उपयोग करने की शक्ति रखने के लिए PHP की इतनी सख्त कमी है कि पूरे मेजबान में वृद्धि हो जाती है "ओह, मैं कर सकता था यह, और यह, और इन चीजों "विचारों के प्रकार - लेकिन कमजोर हो। मैंने PHP से आने वाली डेवलपर्स की कई कहानियों को कुछ भाषा में सुना है जो बहु-थ्रेडिंग की अनुमति देता है, और ऐसी परिस्थिति में आ रहा है जहां उन्होंने 100 धागे शुरू किए हैं जो कि 3 में उचित रूप से किया जा सकता है, और फिर सोच रहा है कि क्यों सर्वर एक कुत्ते की तरह चल रहा है। – DaveRandom

+0

मैंने थ्रेड का उपयोग किया है जब उपयोगकर्ताओं को डेटा उपलब्ध होने की आवश्यकता होती है (प्रदर्शन एक सुविधा है!) और इसे इकट्ठा करने के लिए सभी को एक ही थ्रेड में लंबे समय तक प्रतीक्षा करने की आवश्यकता होगी। मुझे यकीन है कि ऐसे कई अन्य मामले हैं जहां यह सहायक साबित होता है लेकिन यह चांदी की गोली नहीं है या कुछ निर्माण करते समय पहला विचार नहीं है। – Alfabravo

उत्तर

2

क्या जावा डेवलपर बस एपीआई कॉल को संभालने के लिए थ्रेड को स्पिन करेगा और मुख्य प्रक्रिया उपयोगकर्ता को वापस कर देगी?

यह निर्भर करता है।

यदि आप ऐसा करते हैं, तो मूल धागा थोड़ी देर के लिए कुछ और कर सकता है, लेकिन जब तक इसे ईवेंट आधारित नहीं बनाया जाता है, तो अंत में इसे द्वितीयक धागे को खत्म करने की प्रतीक्षा करनी होगी ... और आप वापस जहां आप शुरू किया। (वास्तव में आप क्योंकि आप अब 2 धागे इंतजार कर मिल गया है बदतर ... कर रहे हैं।)


शास्त्रीय जावा सर्वलेट का उपयोग कर कार्यान्वित एक वेब सर्वर के मामले में, प्रत्येक उपयोगकर्ता अनुरोध अपनी ही धागे पर चलाया जाता है। अनुरोध थ्रेड पर एपीआई कॉल करने का सरल तरीका होगा। यह थ्रेड को अवरुद्ध करता है, लेकिन अन्य धागे अन्य अनुरोधों पर काम कर रहे हैं जबकि यह चल रहा है। यह मानते हुए कि आपके पास वेब कंटेनर के थ्रेड पूल में पर्याप्त धागे हैं, यह ठीक काम करता है ... हालांकि आप धागे के ढेर पर बहुत सारे संसाधन (मेमोरी) का उपयोग कर समाप्त करते हैं।

जावा सर्वलेट चश्मे के नवीनतम संस्करणों में एसिंक्रोनस प्रोसेसिंग के लिए समर्थन जोड़ा गया है। मैं विवरण पर तेज़ी से नहीं बढ़ रहा हूं, लेकिन यह सिद्धांत में आपको अनुरोध से अनुरोध थ्रेड को डिस्कनेक्ट करने की अनुमति देता है जबकि बाद वाला ऐसा कुछ कर रहा था जो लंबे समय तक ले रहा था। हालांकि, मुझे विश्वास नहीं है कि इससे यहां मदद मिलेगी ... जब तक कि आपके पास एपीआई का क्लाइंट साइड कार्यान्वयन न हो जो जावा थ्रेड की एक छोटी (और बाध्य) संख्या का उपयोग करके समानांतर में एकाधिक एक साथ अनुरोध चलाने में सक्षम था।

संभवतः अन्य विकल्प हैं, लेकिन वे बहुत अधिक काम कर सकते हैं।


मेरी सलाह के साथ शुरू करने के लिए एक सरल समाधान के लिए जाना होगा। अनुरोध थ्रेड पर बस एपीआई कॉल करें, और अपने वेब सर्वर को उचित थ्रेड के उचित संख्या का उपयोग करने के लिए कॉन्फ़िगर करें।

संभावना है कि आप वास्तव में आवश्यक थ्रूपुट प्राप्त करने के लिए कुछ स्मृति को "बर्बाद" करने में सक्षम होंगे। लंबी अवधि में आपको उसे संबोधित करने की आवश्यकता हो सकती है, लेकिन आपके पास तब तक अधिक स्केलेबल विकल्पों के बारे में और जानने के लिए समय होगा।

+0

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