2017-06-08 16 views
6

एएसआईओ को कम-विलंबता अनुप्रयोगों जैसे एचएफटी (उच्च आवृत्ति व्यापार) बनाने के लिए इस्तेमाल किया जा सकता है?एएसआईओ को कम विलंबता अनुप्रयोगों के निर्माण के लिए इस्तेमाल किया जा सकता है?

  • तो Boost.ASIO प्लेटफ़ॉर्म-विशिष्ट इष्टतम demultiplexing तंत्र का उपयोग करता है: IOCP, epoll, kqueue, poll_set,/dev/मतदान

  • भी इस्तेमाल किया जा सकता पंजा के साथ ईथरनेट-एडाप्टर (टीसीपी/आईपी बोझ उतार लेना इंजन) और ओपनऑनलोड (कर्नेल-बायपास बीएसडी सॉकेट)।

लेकिन बूस्ट.एएसआईओ + TOE + OpenOnload का उपयोग करके कम विलंबता एप्लिकेशन बनाया जा सकता है?

उत्तर

9

मैंने कुछ साल पहले उच्च आवृत्ति व्यापार में उपयोग के लिए बूस्ट असियो का मूल्यांकन किया था। मेरे सबसे अच्छे ज्ञान के लिए मूल बातें अभी भी वही हैं। यहां कुछ कारण दिए गए हैं कि मैंने इसका उपयोग न करने का निर्णय क्यों लिया:

  1. असियो bind() स्टाइल कॉलबैक पर निर्भर करता है। यहाँ कुछ उपर है।
  2. यह स्पष्ट नहीं है कि सही समय पर या सही तरीके से होने वाले कुछ निम्न-स्तर के संचालन की व्यवस्था कैसे करें।
  3. ऐसे क्षेत्र में बहुत जटिल कोड है जो अनुकूलित करने के लिए महत्वपूर्ण है। विशिष्ट उपयोग मामलों के लिए जटिल, सामान्य कोड अनुकूलित करना मुश्किल है। यह सोचकर कि आपको कवर के नीचे देखने की आवश्यकता नहीं होगी, वह एक गलती होगी।
  4. एचएफटी अनुप्रयोगों में पोर्टेबिलिटी की कोई आवश्यकता नहीं है। विशेष रूप से, मल्टीप्लेक्सिंग तंत्र का "स्वचालित" चयन मिशन के विपरीत होता है, क्योंकि प्रत्येक तंत्र को अलग-अलग परीक्षण और अनुकूलित किया जाना चाहिए - इससे इसे कम करने के बजाय अधिक काम होता है।
  5. यदि किसी तृतीय पक्ष लाइब्रेरी का उपयोग किया जाना है, तो libev, libevent, और libuv जैसे अन्य युद्ध अधिक कठोर हैं और इनमें से कुछ डाउनसाइड्स से बचें।

संबंधित: C++ Socket Server - Unable to saturate CPU

+0

मैं अंक देख सकते हैं। 5. और (कुछ हद तक) 4. लगभग 2. मैं सहमत हूं कि जब कस्टम हैंडलर प्रकारों के साथ संयोजन में तारों को सही ढंग से संभालने की बात आती है। क्या आपका मतलब है "सही तरीके से"? मैं वास्तव में नहीं देखता कि कैसे (1.) बाइंड स्टाइल कॉलबैक की आवश्यकता होती है, अकेले रहने दें जहां कम से कम ओवरहेड को एसिंक पूरा होने से बचा जा सकता है। (3.) क्या आप लाइब्रेरी कोड या कॉलिंग कोड का जिक्र कर रहे हैं? शायद आपके पास एक आकर्षक उदाहरण है? – sehe

+0

@sehe: मेरे पास Boost.Asio का उपयोग करके उदाहरण कोड नहीं है - हमने प्रोटोटाइप को त्याग दिया जब हमने महसूस किया कि यह काम नहीं करेगा। उसके बाद 'libuv' व्यवहार्य नहीं था, लेकिन' libev' और 'libevent' थे - अभी भी हम अपने तरीके से जाने का फैसला किया। "सही तरीके से" का अर्थ कुछ है (ए) विशिष्ट समय पर विशिष्ट सॉकोपेट्स/ioctls का उपयोग करने की आवश्यकता है, (बी) एकाधिक कनेक्शन के प्राथमिकता (इच्छाशक्ति भुखमरी सहित) पर पूर्ण नियंत्रण है, और (सी) उपयोग विशिष्ट, गैर-लाभकारी एपीआई जैसे 'accept4() '(जो एशियाई आज भी उपयोग नहीं करता है, इसलिए परमाणु' SOCK_CLOEXEC' नहीं कर सकता)। –

+0

आह। "सही तरीके से" आप बाहरी आवश्यकताओं के संबंध में थे (मैंने माना था कि आप "एएसओ के लिए" मतलब था)। परमाणु SOCK_CLOEXEC उन लोगों में से एक है जो मैंने भाग लिया और आसपास काम करना पड़ा। मुझे किसी भी नमूना _code_ की अपेक्षा नहीं है, ऐसे उदाहरण जो _scenarios_ को स्पष्ट करते हैं, आपको अमूर्त बुलेट ग्रंथों के साथ दिमाग में है :) – sehe

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

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