लिबवू की तुलना बूस्ट / एएसआईओ से कैसे होती है?


239

मुझे इस तरह के पहलुओं में दिलचस्पी होगी:

  • गुंजाइश / सुविधाओं
  • प्रदर्शन
  • परिपक्वता

20
चलो इस सवाल को वापस करें और अच्छे उत्तर प्राप्त करें!
विएट

\ o / .. आशा है कि हमें कुछ व्यावहारिक जवाब मिलेंगे!
ओबर्स्टेट

जवाबों:


493

क्षेत्र

Boost.Asio एक C ++ लाइब्रेरी है, जो नेटवर्किंग पर ध्यान देने के साथ शुरू हुई है, लेकिन इसकी अतुल्यकालिक I / O क्षमताओं को अन्य संसाधनों तक बढ़ाया गया है। इसके अतिरिक्त, Boost.Asio के साथ बूस्ट पुस्तकालयों का हिस्सा होने के कारण, इसका दायरा अन्य बूस्ट लाइब्रेरी के साथ दोहराव को रोकने के लिए थोड़ा संकुचित है। उदाहरण के लिए, Boost.Asio थ्रेड एब्स्ट्रैक्शन प्रदान नहीं करेगा, क्योंकि Boost.Thread पहले से ही एक प्रदान करता है।

दूसरी ओर, लिब्यू एक सी लाइब्रेरी है जिसे Node.js के लिए प्लेटफ़ॉर्म लेयर के रूप में डिज़ाइन किया गया है । यह विंडोज पर IOCP के लिए एक अमूर्तता प्रदान करता है , macOS पर kqueue और लिनक्स पर एपोल करता है। इसके अतिरिक्त, ऐसा लग रहा है कि इसके दायरे में थ्रेड, थ्रेडपूल और इंटर-थ्रेड संचार जैसे अमूर्त और कार्यक्षमता को शामिल करने के लिए थोड़ा बढ़ गया है।

उनके मूल में, प्रत्येक पुस्तकालय एक घटना लूप और अतुल्यकालिक I / O क्षमताओं को प्रदान करता है। वे कुछ बुनियादी सुविधाओं, जैसे टाइमर, सॉकेट्स और अतुल्यकालिक संचालन के लिए ओवरलैप हैं। libuv में एक व्यापक गुंजाइश है, और अतिरिक्त कार्यक्षमता प्रदान करता है, जैसे कि थ्रेड और सिंक्रोनाइज़ेशन एब्स्ट्रक्शन, सिंक्रोनस और एसिंक्रोनस फ़ाइल सिस्टम ऑपरेशंस, प्रोसेस मैनेजमेंट, आदि। इसके विपरीत, Boost.Asio की मूल नेटवर्किंग फ़ोकस सतहें, क्योंकि यह नेटवर्क से संबंधित एक समृद्ध सेट प्रदान करता है। क्षमताओं, जैसे कि ICMP, SSL, सिंक्रोनस ब्लॉकिंग और नॉन-ब्लॉकिंग ऑपरेशंस, और सामान्य कार्यों के लिए उच्च-स्तरीय संचालन, जिसमें एक स्ट्रीम से रीडिंग शामिल है जब तक कि एक नई पंक्ति प्राप्त नहीं होती है।


सुविधा की सूची

यहां कुछ प्रमुख विशेषताओं की तुलना की गई है। चूंकि Boost.Asio का उपयोग करने वाले डेवलपर्स के पास अक्सर अन्य बूस्ट लाइब्रेरी उपलब्ध होती हैं, इसलिए मैंने अतिरिक्त बूस्ट पुस्तकालयों पर विचार करने का विकल्प चुना है यदि वे सीधे लागू किए गए हैं या लागू करने के लिए तुच्छ हैं।

                         लिबाव बूस्ट
इवेंट लूप: हाँ एसियो
थ्रेडपूल: हाँ एसियो + थ्रेड्स
थ्रेडिंग:              
  धागे: हाँ धागे
  सिंक्रनाइज़ेशन: हाँ थ्रेड्स
फ़ाइल सिस्टम ऑपरेशन:
  सिंक्रोनस: हां फाइलसिस्टम
  एसिंक्रोनस: हाँ एसियो + फाइलसिस्टम
टाइमर: हाँ Asio
स्कैटर / इकट्ठा I / O [1] : नो एसियो
नेटवर्किंग:
  ICMP: नो एसियो
  DNS रिज़ॉल्यूशन: async-only Asio
  एसएसएल: नो एसियो
  टीसीपी: एसिंक्स-ओनली एसियो
  यूडीपी: एसिंक्स-ओनली एसियो
सिग्नल:
  हैंडलिंग: हाँ Asio
  भेजना: हाँ नहीं
भारतीय दंड संहिता:
  यूनिक्स डोमेन सॉकेट: हाँ एसियो
  विंडोज नामांकित पाइप: हाँ एसियो
प्रक्रिया प्रबंधन:
  कोचिंग: हाँ प्रक्रिया
  मैं / हे पाइप: हाँ प्रक्रिया
  स्पॉनिंग: हाँ प्रक्रिया
सिस्टम क्वेरी:
  सीपीयू: हाँ नहीं
  नेटवर्क इंटरफ़ेस: हाँ नहीं
सीरियल पोर्ट: नहीं हां
TTY: हाँ नहीं
साझा पुस्तकालय लोड हो रहा है: हाँ एक्सटेंशन [2]

1. स्कैटर / इकट्ठा आई / ओ

2. Boost.Extension को बूस्ट की समीक्षा के लिए कभी प्रस्तुत नहीं किया गया था। जैसा कि यहां बताया गया है , लेखक इसे पूर्ण मानता है।

इवेंट लूप

हालांकि दोनों लिबव और बूस्ट.एसियो इवेंट लूप प्रदान करते हैं, दोनों के बीच कुछ सूक्ष्म अंतर हैं:

  • जबकि लिबवू कई ईवेंट लूप का समर्थन करता है, यह एक ही लूप को कई थ्रेड से चलाने का समर्थन नहीं करता है। इस कारण से, uv_default_loop()नए लूप ( uv_loop_new()) बनाने के बजाय डिफ़ॉल्ट लूप ( ) का उपयोग करते समय देखभाल की आवश्यकता होती है , क्योंकि एक अन्य घटक डिफ़ॉल्ट लूप को चला रहा हो सकता है।
  • Boost.Asio में एक डिफ़ॉल्ट लूप की धारणा नहीं है; सभी io_serviceअपने स्वयं के लूप हैं जो कई थ्रेड को चलाने की अनुमति देते हैं। इस Boost.Asio का समर्थन करने के लिए कुछ प्रदर्शन की कीमत पर आंतरिक लॉकिंग करता है । Boost.Asio का संशोधन इतिहास बताता है कि लॉकिंग को कम करने के लिए कई प्रदर्शन सुधार हुए हैं।

धागा पूल

  • libuv एक सूत्र के माध्यम से प्रदान करता है uv_queue_work। थ्रेडपूल का आकार पर्यावरण चर के माध्यम से कॉन्फ़िगर करने योग्य है UV_THREADPOOL_SIZE। कार्य को इवेंट लूप के बाहर और थ्रेडपूल के भीतर निष्पादित किया जाएगा। एक बार काम पूरा हो जाने के बाद, पूरा हैंडलर इवेंट लूप के भीतर चलने के लिए कतारबद्ध हो जाएगा।
  • जबकि Boost.Asio एक थ्रेडपूल प्रदान नहीं करता है, io_serviceआसानी से एक के रूप में कार्य io_serviceकरने के लिए कई सूत्र अनुमति देने के परिणामस्वरूप कार्य कर सकता है run। यह उपयोगकर्ता को थ्रेड प्रबंधन और व्यवहार की जिम्मेदारी देता है, जैसा कि इस उदाहरण में देखा जा सकता है ।

थ्रेडिंग और सिंक्रोनाइज़ेशन

  • libuv धागे और तुल्यकालन प्रकारों के लिए एक अमूर्तता प्रदान करता है।
  • Boost.Thread एक थ्रेड और सिंक्रनाइज़ेशन प्रकार प्रदान करता है। इनमें से कई प्रकार C ++ 11 मानक का बारीकी से पालन करते हैं, लेकिन कुछ एक्सटेंशन भी प्रदान करते हैं। Boost.Asio के परिणामस्वरूप कई थ्रेड्स को एक ईवेंट लूप चलाने की अनुमति मिलती है, यह स्पष्ट लॉकिंग तंत्र का उपयोग किए बिना ईवेंट हैंडलर्स के अनुक्रमिक मंगलाचरण बनाने के लिए एक साधन के रूप में किस्में प्रदान करता है।

फ़ाइल सिस्टम ऑपरेशन

  • libuv कई फ़ाइल सिस्टम ऑपरेशन के लिए एक अमूर्तता प्रदान करता है। प्रति ऑपरेशन एक कार्य है, और प्रत्येक ऑपरेशन या तो तुल्यकालिक अवरुद्ध या अतुल्यकालिक हो सकता है। यदि कॉलबैक प्रदान किया जाता है, तो आंतरिक थ्रेडपूल के भीतर ऑपरेशन को एसिंक्रोनस रूप से निष्पादित किया जाएगा। यदि कॉलबैक प्रदान नहीं किया जाता है, तो कॉल सिंक्रोनस ब्लॉकिंग होगी।
  • Boost.Filesystem कई फाइल सिस्टम ऑपरेशन के लिए सिंक्रोनस ब्लॉकिंग कॉल्स प्रदान करता है। इन्हें एसिंक्रोनस फ़ाइल सिस्टम ऑपरेशन बनाने के लिए Boost.Asio और एक थ्रेडपूल के साथ जोड़ा जा सकता है।

नेटवर्किंग

  • यूबीडीपी और टीसीपी सॉकेट्स के साथ-साथ डीएनएस रिज़ॉल्यूशन पर लिबाव अतुल्यकालिक संचालन का समर्थन करता है। एप्लिकेशन डेवलपर्स को पता होना चाहिए कि अंतर्निहित फ़ाइल डिस्क्रिप्टर गैर-अवरुद्ध करने के लिए सेट हैं। इसलिए, देशी तुल्यकालिक संचालन को रिटर्न मान और इरनो के लिए EAGAINया जाँच करनी चाहिए EWOULDBLOCK
  • Boost.Asio अपने नेटवर्किंग समर्थन में थोड़ा अधिक समृद्ध है। कामेच्छा की नेटवर्किंग के कई फीचर्स के अलावा, Boost.Asio SSL और ICMP सॉकेट्स को सपोर्ट करता है। इसके अलावा, Boost.Asio अपने अतुल्यकालिक संचालन के अलावा, तुल्यकालिक अवरुद्ध और तुल्यकालिक गैर-अवरुद्ध संचालन प्रदान करता है। ऐसे कई मुफ्त खड़े कार्य हैं जो सामान्य उच्च-स्तरीय संचालन प्रदान करते हैं, जैसे कि बाइट्स की एक निर्धारित मात्रा को पढ़ना, या जब तक कि एक निर्दिष्ट सीमांकक चरित्र नहीं पढ़ा जाता है।

संकेत

  • लिंबुव killअपने uv_signal_tप्रकार और uv_signal_*संचालन के साथ एक अमूर्त और सिग्नल हैंडलिंग प्रदान करता है ।
  • Boost.Asio के लिए एक अमूर्त साबित नहीं होता है kill, लेकिन इसकी signal_setसिग्नल हैंडलिंग प्रदान करता है।

भारतीय दंड संहिता


एपीआई अंतर

जबकि API अकेले भाषा के आधार पर भिन्न होते हैं, यहाँ कुछ प्रमुख अंतर हैं:

संचालन और हैंडलर एसोसिएशन

Boost.Asio के भीतर, एक ऑपरेशन और एक हैंडलर के बीच एक-से-एक मैपिंग है। उदाहरण के लिए, प्रत्येक async_writeऑपरेशन एक बार WriteHandler को आमंत्रित करेगा । यह कई लिब्यू ऑपरेशंस और हैंडलर्स के लिए सही है। हालांकि, लिबाव uv_async_sendकई-से-एक मैपिंग का समर्थन करता है। एकाधिक uv_async_sendकॉलों के परिणामस्वरूप uv_async_cb को एक बार कॉल किया जा सकता है ।

कॉल चेन बनाम वॉचर लूप्स

कार्य के साथ काम करते समय, जैसे कि एक स्ट्रीम / यूडीपी से पढ़ना, संकेतों को संभालना, या टाइमर पर प्रतीक्षा करना, Boost.Asio की एसिंक्रोनस कॉल चेन कुछ अधिक स्पष्ट हैं। लिब्यू के साथ, एक विशेष घटना में हितों को नामित करने के लिए एक चौकीदार बनाया जाता है। चौकीदार के लिए एक लूप शुरू किया जाता है, जहां कॉलबैक प्रदान किया जाता है। हितों की घटना प्राप्त होने पर, कॉलबैक आमंत्रित किया जाएगा। दूसरी ओर, Boost.Asio को हर बार आवेदन जारी करने के लिए एक ऑपरेशन की आवश्यकता होती है, जो इवेंट को संभालने में रुचि रखता है।

इस अंतर को समझने में मदद करने के लिए, यहां Boost.Asio के साथ एक अतुल्यकालिक रीड लूप है, जहां async_receiveकॉल को कई बार जारी किया जाएगा:

void start()
{
  socket.async_receive( buffer, handle_read ); ----.
}                                                  |
    .----------------------------------------------'
    |      .---------------------------------------.
    V      V                                       |
void handle_read( ... )                            |
{                                                  |
  std::cout << "got data" << std::endl;            |
  socket.async_receive( buffer, handle_read );   --'
}    

और यहाँ लिब्युव के साथ एक ही उदाहरण है, जहाँ handle_readहर बार देखने वाले को यह पता चलता है कि सॉकेट में डेटा है:

uv_read_start( socket, alloc_buffer, handle_read ); --.
                                                      |
    .-------------------------------------------------'
    |
    V
void handle_read( ... )
{
  fprintf( stdout, "got data\n" );
}

स्मृति आवंटन

Boost.Asio में एसिंक्रोनस कॉल चेन और libuv में देखने वालों के परिणामस्वरूप, मेमोरी आवंटन अक्सर अलग-अलग समय पर होता है। चौकीदारों के साथ, लिबवू आवंटन को तब तक आबंटित करता है जब तक कि उसे एक ऐसी घटना न मिल जाए जिसे संभालने के लिए स्मृति की आवश्यकता होती है। आवंटन एक उपयोगकर्ता कॉलबैक के माध्यम से किया जाता है, जो आंतरिक रूप से लीवुव पर लगाया जाता है, और आवेदन की अस्वीकृति की जिम्मेदारी को समाप्त करता है। दूसरी ओर, कई Boost.Asio ऑपरेशंस के लिए यह आवश्यक है कि मेमोरी को एसिंक्रोनस ऑपरेशन जारी करने से पहले आवंटित किया जाए, जैसे कि केस के bufferलिए async_read। Boost.Asio प्रदान करता है null_buffers, जिसका उपयोग किसी ईवेंट को सुनने के लिए किया जा सकता है, जिससे एप्लिकेशन को मेमोरी आवंटन को स्थगित करने की अनुमति मिलती है, जब तक कि मेमोरी की आवश्यकता नहीं होती है।

यह मेमोरी एलोकेशन अंतर भी खुद को bind->listen->acceptलूप के भीतर प्रस्तुत करता है । Libuv के साथ, uv_listenएक ईवेंट लूप बनाता है जो उपयोगकर्ता कॉलबैक को आमंत्रित करेगा जब कोई कनेक्शन स्वीकार करने के लिए तैयार हो। यह एप्लिकेशन को क्लाइंट के आवंटन को स्थगित करने की अनुमति देता है जब तक कि कनेक्शन का प्रयास नहीं किया जाता है। दूसरी ओर, Boost.Asio listenकेवल की स्थिति को बदलता है acceptorasync_acceptकनेक्शन घटना के लिए सुनता है, और साथियों की आवश्यकता लागू किए जाने से पहले आवंटित किया जाना है।


प्रदर्शन

दुर्भाग्य से, मेरे पास libuv और Boost.Asio की तुलना करने के लिए कोई ठोस बेंचमार्क संख्या नहीं है। हालाँकि, मैंने वास्तविक समय और निकट-वास्तविक समय के अनुप्रयोगों में पुस्तकालयों का उपयोग करके इसी तरह के प्रदर्शन को देखा है। यदि हार्ड नंबर वांछित हैं, तो libuv का बेंचमार्क टेस्ट शुरुआती बिंदु के रूप में काम कर सकता है।

इसके अतिरिक्त, जबकि वास्तविक अड़चनों की पहचान करने के लिए प्रोफाइलिंग की जानी चाहिए, स्मृति आवंटन के बारे में जागरूक रहें। कामेच्छा के लिए, मेमोरी आवंटन रणनीति मुख्य रूप से आवंटनकर्ता कॉलबैक तक सीमित है। दूसरी ओर, Boost.Asio का एपीआई एक एलोकेटर कॉलबैक के लिए अनुमति नहीं देता है, और इसके बजाय आवंटन रणनीति को आवेदन में धकेल देता है। हालाँकि, Boost.Asio में हैंडलर / कॉलबैक की प्रतिलिपि बनाई जा सकती है, आबंटित की जा सकती है, और डील-डौल की जा सकती है। Boost.Asio हैंडलर के लिए मेमोरी आवंटन रणनीति को लागू करने के लिए कस्टम मेमोरी आवंटन कार्यों को प्रदान करने के लिए अनुप्रयोगों की अनुमति देता है ।


परिपक्वता

Boost.Asio

आसियो के विकास में कम से कम ओसीटी -2004 की तारीखें आती हैं, और इसे 20-दिन की पीयर समीक्षा के बाद 22-मार्च -2016 को बूस्ट 1.35 में स्वीकार किया गया। यह TR2 के लिए नेटवर्किंग लाइब्रेरी प्रस्ताव के संदर्भ कार्यान्वयन और एपीआई के रूप में भी कार्य करता है । Boost.Asio के पास उचित मात्रा में प्रलेखन है , हालांकि इसकी उपयोगिता उपयोगकर्ता से उपयोगकर्ता में भिन्न होती है।

एपीआई भी एक काफी सुसंगत लग रहा है। इसके अतिरिक्त, ऑपरेशन के नाम में अतुल्यकालिक संचालन स्पष्ट हैं। उदाहरण के लिए, acceptसिंक्रोनस ब्लॉकिंग है और async_acceptएसिंक्रोनस है। उदाहरण के लिए, आम तौर पर I / O कार्य के लिए API नि: शुल्क फ़ंक्शन प्रदान करता है, एक स्ट्रीम से पढ़ने के लिए जब तक \r\nपढ़ा नहीं जाता है। कुछ नेटवर्क विशिष्ट विवरणों को छिपाने के लिए ध्यान भी दिया गया है, जैसे ip::address_v4::any()"सभी इंटरफेस" के पते का प्रतिनिधित्व करना 0.0.0.0

अंत में, बूस्ट 1.47+ हैंडलर ट्रैकिंग प्रदान करता है , जो डीबगिंग के साथ-साथ C ++ 11 समर्थन के लिए उपयोगी साबित हो सकता है।

libuv

उनके गितुब रेखांकन के आधार पर, Node.js का विकास कम से कम FEB-2009 , और libuv के विकास की तारीख MAR-2011 तक हैUvbook एक libuv परिचय के लिए एक महान जगह है। एपीआई प्रलेखन यहाँ है

कुल मिलाकर, एपीआई काफी सुसंगत और प्रयोग करने में आसान है। एक विसंगति जो भ्रम का स्रोत हो सकती है, वह uv_tcp_listenहै द्रष्टा पाश। यह अन्य पर नजर रखने वालों कि आम तौर पर एक है से अलग है uv_*_startऔर uv_*_stopद्रष्टा लूप के जीवन को नियंत्रित करने के कार्यों की जोड़ी। इसके अलावा, कुछ uv_fs_*कार्यों में तर्कों की एक सभ्य राशि है (7 तक)। कॉलबैक (अंतिम तर्क) की उपस्थिति पर सिंक्रोनस और एसिंक्रोनस व्यवहार निर्धारित होने के साथ, सिंक्रोनस व्यवहार की दृश्यता कम हो सकती है।

अंत में, लिबव कमिट हिस्ट्री पर एक त्वरित नज़र से पता चलता है कि डेवलपर्स बहुत सक्रिय हैं।


2
धन्यवाद दोस्त! बहुत बढ़िया जवाब! मैं कुछ भी अधिक व्यापक की :) सोच भी नहीं सकते
वियतनामी

1
जवाब से बहुत खुश, मैं आपको इनाम के साथ पुरस्कार देता हूं :) चलो एसओ को खुद के लिए सबसे अच्छा जवाब तय करने दें।
वियतनामी

28
अतुल्य उत्तर। यह दोनों उच्च-स्तरीय चित्र, साथ ही विशिष्ट, महत्वपूर्ण अंतर को विस्तार से कवर करता है (जैसे कि थ्रेडिंग / इवेंटलूप)। आपका बहुत बहुत धन्यवाद!
9

1
@ रॉबर्टस्टैट: नहींं। मैंने यह उल्लेख करने के लिए उत्तर अपडेट किया है कि अधिकांश लिबव के संचालन एक-से-एक हैं। हालाँकि, कामेच्छा कई uv_async_sendकॉल को जमा कर सकती है , और उन सभी को एक कॉलबैक से संभाल सकती है। यह यहाँ प्रलेखित है । साथ ही सभी का धन्यवाद।
टैनर सैंसबरी

2
Boost.Asio पर ईवेंट लूप पर आंतरिक लॉकिंग प्रदर्शन के दृष्टिकोण से डरावना लगता है। यह लॉक-फ्री लिब्यू के समान प्रदर्शन कैसे कर सकता है? हो सकता है कि प्रदर्शन अनुभाग पर एक चेतावनी बयान जोड़ना सहायक हो।
zeodtr

46

ठीक। मुझे दोनों पुस्तकालयों का उपयोग करने का कुछ अनुभव है और कुछ चीजों को स्पष्ट कर सकता हूं।

सबसे पहले, एक वैचारिक दृष्टिकोण से ये पुस्तकालय डिजाइन में काफी भिन्न हैं। उनके पास अलग-अलग आर्किटेक्चर हैं, क्योंकि वे अलग-अलग पैमाने के हैं। Boost.Asio टीसीपी / यूडीपी / आईसीएमपी प्रोटोकॉल, पोसिक्स, एसएसएल और इतने पर के साथ उपयोग करने के लिए लक्षित एक बड़ी नेटवर्किंग लाइब्रेरी है। Libuv , Node.js के लिए मुख्य रूप से IOCP के क्रॉस-प्लेटफ़ॉर्म अमूर्त के लिए एक परत है , मुख्य रूप से। इसलिए लिबवू कार्यात्मक रूप से Boost.Asio का एक उपसमूह है (केवल टीसीपी / यूडीपी सॉकेट थ्रेड्स, टाइमर की सामान्य विशेषताएं)। ऐसा होने के नाते, हम केवल कुछ मानदंडों का उपयोग करके इन पुस्तकालयों की तुलना कर सकते हैं:

  1. Node.js के साथ एकीकरण - लिबव काफी बेहतर है क्योंकि यह इस के लिए लक्षित है (हम इसे पूरी तरह से एकीकृत कर सकते हैं और सभी पहलुओं में उपयोग कर सकते हैं, उदाहरण के लिए, क्लाउड उदा विंडोज़ एज़्योर)। लेकिन Asio भी लगभग उसी कार्यक्षमता को लागू करता है जैसे Node.js ईवेंट कतार चालित वातावरण में।
  2. IOCP प्रदर्शन - मैं महान भिन्नताओं को नहीं देख सका, क्योंकि ये दोनों लाइब्रेरी OS OS को अमूर्त करते हैं। लेकिन वे इसे एक अलग तरीके से करते हैं: एसियो भारी रूप से सी ++ सुविधाओं जैसे कि टेम्पलेट और कभी-कभी टीएमपी का उपयोग करता है। लिबुव एक देशी सी-लाइब्रेरी है। लेकिन फिर भी IOCP के आसियो की प्राप्ति बहुत ही कुशल है। Asio में यूडीपी सॉकेट्स पर्याप्त नहीं हैं, उनके लिए libuv का उपयोग करना बेहतर है।

    नए C ++ फीचर्स के साथ एकीकरण: Asio बेहतर है (Asio 1.51 बड़े पैमाने पर C ++ 11 एसिंक्रोनस मॉडल, मूवमेंट्स, वैरेडिक टेम्प्लेट का उपयोग करें)। परिपक्वता के संबंध में, Asio अच्छे प्रलेखन के लिए एक अधिक स्थिर और परिपक्व परियोजना है (यदि इसकी तुलना libuv से करें। हेडर विवरण), इंटरनेट पर बहुत सी जानकारी (वीडियो वार्ता, ब्लॉग: http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostetio?pg) = 1 , आदि) और यहां तक ​​कि किताबें (पेशेवरों के लिए नहीं, लेकिन फिर भी: http://en.highscore.de/cpp/boost/index.html )। Libuv में केवल एक ऑनलाइन पुस्तक है (लेकिन यह भी अच्छा है) http://nikhilm.github.com/uvbook/index.htmlऔर कई वीडियो वार्ता, इसलिए सभी रहस्यों को जानना मुश्किल होगा (यह पुस्तकालय उनमें से एक है)। कार्यों की अधिक विशिष्ट चर्चा के लिए मेरी टिप्पणियाँ नीचे देखें।

निष्कर्ष के रूप में, मुझे यह कहना चाहिए कि यह सब आपके उद्देश्यों, आपकी परियोजना और आप क्या करने का इरादा रखते हैं पर निर्भर करता है।


11
क्या मायने रखता है आपका तकनीकी कौशल और अनुभव। क्यूबा से एक तरह से बधाई।
dsign

2
मैं असियो के प्रलेखन को छोड़कर आपके सभी बिंदुओं से सहमत हूं। आधिकारिक दस्तावेज इस अद्भुत पुस्तकालय के लिए कोई न्याय नहीं करता है। अन्य डॉक्स के झुंड हैं और लेखक से एक बूस्ट कॉन बात है जो मुझे बहुत उपयोगी लगी। और मैं आसियो के लिए एक किताब भर नहीं आया हूं। क्या आप इसे अपने उत्तर में जोड़ सकते हैं? यह बहुत मददगार होगा।
विकास

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

"तो लिबाव कार्यात्मक रूप से Boost.Asio (टीसीपी / यूडीपी / सॉकेट्स और थ्रेड्स) का एक उपसमुच्चय" से क्या मतलब है? TOC nikhilm.github.com/uvbook/index.html libuv के अनुसार व्यापक अनुप्रयोग है तो बढ़ावा :: asio।
सेर्गेई निकुलोव

7
@ ASlexanderKaraberov यूडीपी के साथ ASIO की समस्याओं पर विस्तार कर सकता है?
ब्रूनो मार्टिनेज

19

एक बहुत बड़ा अंतर असियो के लेखक (क्रिस्टोफर कोहल्हॉफ) अपनी लाइब्रेरी को C ++ स्टैंडर्ड लाइब्रेरी में शामिल करने के लिए तैयार कर रहे हैं, देखें http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2175 .pdf और http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4370.html


2

पोर्टेबिलिटी स्टेटस जोड़ना: इस उत्तर को पोस्ट करने और अपने स्वयं के प्रयासों के अनुसार:

  • Boost.ASIO को iOS और Android के लिए कोई आधिकारिक समर्थन नहीं है, उदाहरण के लिए, इसका निर्माण सिस्टम iOS के लिए बॉक्स से बाहर काम नहीं करता है।
  • libv iOS और Android के लिए आसानी से बनाता है, उनके डॉक्स में Android अधिकार के लिए आधिकारिक समर्थन है । मेरे स्वयं के सामान्य iOS ऑटोटूलस-आधारित परियोजनाओं के लिए स्क्रिप्ट का निर्माण करता है जो बिना मुद्दों के काम करता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.