2011-12-15 14 views
13

मैं "यूआई डेवलपर्स" (हमें) और "सी ++ डेवलपर्स" (उन्हें) से बना डेस्कटॉप ऐप टीम पर काम करता हूं। सी ++ देव हमें यूआई में प्रदर्शित होने वाले सभी डेटा प्राप्त करने के लिए ज़िम्मेदार हैं, इसलिए वे सभी आईओ, डेटाबेस एक्सेस, वेब कॉल इत्यादि करते हैं।सी ++ के लिए गैर थ्रेडेड एसिंक आईओ के लिए परिचय?

हाल ही में हमने आईओ अवरोधन के साथ कुछ गंभीर प्रदर्शन समस्याओं में भाग लिया है यूआई थ्रेड। बेशक, इसका समाधान आईओ एसिंक्रोनस बनाना है। लेकिन सी ++ देवताओं ने आग्रह किया कि यह केवल एक नया धागा पैदा करने से संभव है, जैसा कि हम बहुत महंगा जानते हैं।

मुझे नोड.जेएस आदि से पता है कि async IO को धागे को शामिल करने की आवश्यकता नहीं है। मुझे पता है कि Win32, और संभवतः मैक, एक घटना लूप है। लेकिन, मुझे नहीं पता कि सी ++ भूमि में एसिंक गैर-थ्रेडेड आईओ करने के लिए कौन से समाधान प्रचलित हैं। (हो सकता है कि libuv चीज जो नोड underlies?)।

क्या कोई भी कुछ लोकप्रिय पुस्तकालयों, या बेहतर अभी तक ट्यूटोरियल लेखों को इंगित कर सकता है, इसलिए हम इस अवधारणा को हमारे सी ++ देवताओं को पेश कर सकते हैं? क्रॉस-प्लेटफ़ॉर्म (पीसी और मैक) के लिए बोनस पॉइंट। यदि कोई एसिंक गैर-थ्रेडेड डेटाबेस समाधान है तो अधिक बोनस अंक, क्योंकि मेरा मानना ​​है कि SQLite का हमारा उपयोग हमारी कई समस्याओं का स्रोत है।

+4

"एक नया धागा _spawning, जैसा कि हम बहुत महंगा जानते हैं_"। मैं यह राय बहुत देखता हूं। और मुझे कहना है, मैं इसे "बहुत महंगा" नहीं जानता। यह आपके विशिष्ट उपयोग मामले पर अत्यधिक निर्भर है, और जिन मामलों में अतिरिक्त धागे "से बचा जाना चाहिए" उन सामान्य मामलों की तुलना में बहुत छोटा है जो उन्हें गले लगाएंगे। – Chad

+0

हमारे ऐप को उपयोगकर्ता की ईबुक लाइब्रेरी में प्रत्येक फ़ाइल के गुणों को पढ़ने की आवश्यकता होती है, जो कुछ मामलों में 1500 फाइलों के ऊपर हो सकती है। 1500 धागे स्वीकार्य नहीं है। – Domenic

+4

हालांकि, आप इसे एक थ्रेड में कर सकते हैं। 1500 आइटम एक अविश्वसनीय रूप से छोटी काम कतार है। – Chad

उत्तर

11

Boost Asynchronous I/O (asio)। उनके पास excellent tutorial और कई examples हैं। यह क्रॉस प्लेटफॉर्म है।

+1

मैं इसे पढ़ने से नहीं कह सकता था; क्या यह धागे का उपयोग करता है? – Domenic

+1

यह करने की ज़रूरत नहीं है। आप WM_TIMER संदेशों का उपयोग कर सकते हैं और 'boost :: asio :: io_service :: poll_one()' का उपयोग करके async कार्य शेड्यूलर चला सकते हैं। – Chad

+1

http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/overview/core/threads.html –

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