2013-07-22 3 views
6

प्रश्न एक ट्रोल की तरह दिख सकता है लेकिन वास्तव में यह है कि वर्ट.एक्स कैसे एक वर्टिकल समर्पित थ्रेड में चलता है क्योंकि concurrency का प्रबंधन करता है। इस सरल vert.x http जावा में लिखा सर्वर परक्या Vert.x में एकल वर्टिकल के लिए वास्तविक सहमति है?

आइए नज़र:

import org.vertx.java.core.Handler; 
import org.vertx.java.core.http.HttpServerRequest; 
import org.vertx.java.platform.Verticle; 

public class Server extends Verticle { 
    public void start() { 
     vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { 
      public void handle(HttpServerRequest req) { 
       req.response().end("Hello"); 
      } 
     }).listen(8080); 
    } 
} 

जहां तक ​​मेरा डॉक्स को समझते हैं, इस पूरे फ़ाइल एक verticle प्रतिनिधित्व करता है। इसलिए प्रारंभिक वर्टिकल थ्रेड के भीतर स्टार्ट विधि को बुलाया जाता है, अब तक इतना अच्छा है। लेकिन अनुरोध हैडलर कहां से आह्वान किया गया है? अगर यह बिल्कुल इस धागे पर आक्रमण किया जाता है तो मैं नहीं देख सकता कि यह node.js. से बेहतर कहां है।

मैं नेटटी से काफी परिचित हूं, जो नेटवर्क/समवर्ती पुस्तकालय vert.x पर आधारित है। प्रत्येक आने वाले कनेक्शन को एक समर्पित धागे में मैप किया जाता है जो काफी अच्छी तरह से स्केल करता है। तो .. क्या इसका मतलब यह है कि आने वाले कनेक्शन भी लंबवत का प्रतिनिधित्व करते हैं? लेकिन फिर लंबवत उदाहरण "सर्वर" उन ग्राहकों के साथ संवाद कैसे कर सकता है? असल में मैं कहूंगा कि यह अवधारणा नोड.जे.एस. जैसी ही सीमित है।

कृपया मुझे अवधारणाओं को सही समझने में मदद करें!

सादर, क्रिस

+0

नेटटी में धागे और कनेक्शन के बीच कोई निश्चित मैपिंग नहीं है --- वास्तव में क्लासिक java.io सिंक्रोनस I/O पर इसका मुख्य लाभ है। धागे को केवल थ्रेड पूल से भर्ती किया जाता है जब वास्तविक कार्य होता है। –

+1

मुझे लगता है कि एक लंबवत का एक प्रमुख सिद्धांत यह है कि प्रत्येक घटना को एक थ्रेड द्वारा परोसा जाता है (या कम से कम प्रत्येक विशिष्ट घटना के लिए प्रत्येक घटना क्रमशः निष्पादित की जाती है)। तो, नहीं, Vert.x * एक * लंबवत के लिए समवर्ती नहीं है, और यह बात है। –

उत्तर

4

मैं कोई है जो काफी vert.x में शामिल है और उसने मुझसे कहा कि मैं मूल रूप से "संगामिति" मुद्दे के बारे में सही हूँ करने के लिए बात की है।

लेकिन उन्होंने मुझे दस्तावेज़ों में एक अनुभाग दिखाया जो मुझे पूरी तरह याद आया जहां "स्केलिंग सर्वर" विस्तार से समझाया गया है।

मूल अवधारणा यह है कि जब आप एक लंबवत लिखते हैं तो आपके पास केवल एक कोर प्रदर्शन होता है। लेकिन -इंस्टेंस पैरामीटर का उपयोग करके vert.x प्लेटफार्म शुरू करना संभव है जो परिभाषित करता है कि दिए गए वर्टिकल के कितने उदाहरण चल रहे हैं। Vert.x हुड के नीचे थोड़ा सा जादू करता है ताकि मेरे सर्वर के 10 उदाहरण 10 सर्वर सॉकेट खोलने की कोशिश न करें लेकिन वास्तव में इसके बजाय एक एकल। इस तरह vert.x एकल लंबवत के लिए भी क्षैतिज स्केलेबल है।

यह वास्तव में एक महान अवधारणा है और विशेष रूप से एक महान ढांचा है !!

0

प्रत्येक वर्टिकल सिंगल थ्रेडेड होता है, स्टार्टअप पर वर्टक्स सबसिस्टम उस वर्टिकल को इवेंट लूप असाइन करता है। उस वर्टिकल में प्रत्येक कोड उस ईवेंट लूप में निष्पादित किया जाएगा। अगली बार आपको http://groups.google.com/forum/#!forum/vertx में प्रश्न पूछना चाहिए, समूह बहुत जीवंत है, आपके प्रश्न का तुरंत उत्तर दिया जाएगा।

1

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

आप सर्वर (जैसे = एन = सीपीयू कोर) लंबवत उदाहरणों को बढ़ाकर सर्वरों को स्केल कर सकते हैं, प्रत्येक एक ही टीसीपी/HTTP पोर्ट पर सुनने की कोशिश कर रहा है।

    :

    कहाँ यह Node.js की तुलना में चमकता है कि JVM ही मल्टी-थ्रेडेड है, जो आप (, देखने के क्रम बिंदु से जावा आदि आदि के प्रकार के सुरक्षा को छोड़कर) अधिक लाभ देता है

  • मल्टीथ्रेडेड (क्रॉस-वर्टिकल) संचार, जबकि अभी भी थ्रेड-सुरक्षित अभिनेता-जैसे मॉडल के लिए बाध्य किया जा रहा है, को आईपीसी (इंटर प्रोसेस कम्युनिकेशन) की आवश्यकता नहीं है ताकि वर्टिकल के बीच संदेश पास हो सकें - सबकुछ एक ही प्रक्रिया, उसी मेमोरी क्षेत्र के अंदर होता है। जो नोड से तेज है।js एक नई प्रणाली की प्रक्रिया में हर काँटेदार कार्य को उत्पन्न करने और गणना भारी और/या एक ही JVM प्रक्रिया के भीतर कार्य को अवरुद्ध करने के लिए
  • की क्षमता संवाद करने के लिए भारतीय दंड संहिता का उपयोग कर: http://vertx.io/docs/vertx-core/java/#blocking_code या http://vertx.io/docs/vertx-core/java/#worker_verticles
  • वी 8 की तुलना में हॉटस्पॉट JVM की गति :)
+0

यह भी ध्यान दें कि V8 को कभी भी सर्वर-साइड पर उपयोग करने का इरादा नहीं था, नोडज बस कुछ बिंदु पर हुआ, जावास्क्रिप्ट कच्चे प्रदर्शन के लिए एक बहुत ही खराब प्रारंभिक बिंदु है। JVM हमेशा प्रदर्शन के लिए सी/सी ++ के खिलाफ प्रतिस्पर्धा करता है और सर्वर-साइड उपयोग का लंबा इतिहास है, यही कारण है कि यह अभी बहुत तेज़ है: https://www.cubrid.org/blog/inside-vertx-comparison-with -nodejs –

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