C++ के लिए कार्य कतारें: चयन और कार्यान्वयन के लिए पूर्ण मार्गदर्शिका
C++ में आधुनिक प्रोग्रामिंग में, मल्टीथ्रेडिंग का कुशल उपयोग अनुप्रयोगों के प्रदर्शन की कुंजी है। प्रमुख पैटर्न में से एक कार्य कतार (task queue) है, जो थ्रेड्स के जीवनचक्र को मैन्युअल रूप से प्रबंधित किए बिना उनके बीच कार्य वितरित करने की अनुमति देता है। इस लेख में, हम C++ के लिए सर्वश्रेष्ठ पुस्तकालयों पर चर्चा करेंगे जो तैयार समाधान प्रदान करते हैं, और यह भी दिखाएंगे कि स्वयं कार्य कतार कैसे कार्यान्वित करें।
कार्य कतार क्या है और इसकी आवश्यकता क्यों है
कार्य कतार एक तंत्र है जिसमें आप कतार में "कार्य" (फ़ंक्शन, लैम्ब्डा या ऑब्जेक्ट) रखते हैं, और थ्रेड पूल (thread pool) स्वचालित रूप से उन्हें निष्पादित करता है। यह प्रत्येक कार्य के लिए थ्रेड बनाने और समाप्त करने की आवश्यकता को समाप्त करता है, ओवरहेड को कम करता है और सिंक्रनाइज़ेशन को सरल बनाता है।
मुख्य लाभ:
- CPU कोर के बीच लोड का स्वचालित वितरण
- थ्रेड्स का पुन: उपयोग (संसाधनों की बचत)
- बिना लॉक के नए कार्य जोड़ने में आसानी
- कार्यों को प्राथमिकता देने और रद्द करने की क्षमता
C++ में कार्य कतारों के लिए लोकप्रिय पुस्तकालय
1. Intel Threading Building Blocks (TBB)
Intel द्वारा विकसित सबसे शक्तिशाली पुस्तकालयों में से एक। यह tbb::parallel_for, tbb::task_group और एक लचीला कार्य शेड्यूलर प्रदान करता है। उच्च-प्रदर्शन कंप्यूटिंग के लिए उपयुक्त।
#include <tbb/task_group.h>#include <iostream>
int main() { tbb::task_group tg; tg.run([] { std::cout << "कार्य 1"; }); tg.run([] { std::cout << "कार्य 2"; }); tg.wait(); // पूरा होने की प्रतीक्षा करें return 0;}2. Boost.Task (पुराना, लेकिन अवधारणाएँ Boost.Fiber में जीवित हैं)
पहले Boost में Boost.Task पुस्तकालय था, अब इसकी कार्यक्षमता आंशिक रूप से Boost.Fiber में स्थानांतरित हो गई है। यह प्राथमिकताओं और अतुल्यकालिक परिणामों के साथ कतारें बनाने की अनुमति देता है।
// Boost.Fiber के साथ उदाहरण (आधुनिक विकल्प)#include <boost/fiber/all.hpp>#include <iostream>
int main() { boost::fibers::fiber f1([]{ std::cout << "फाइबर 1"; }); f1.join(); return 0;}3. PPL (Parallel Patterns Library) — Windows के लिए
Microsoft द्वारा पुस्तकालय, Visual Studio में निर्मित। यह concurrency::task और concurrency::parallel_for का उपयोग करता है। Windows Runtime के साथ उत्कृष्ट एकीकरण।
#include <ppltasks.h>#include <iostream>
int main() { concurrency::create_task([]{ std::cout << "PPL कार्य"; }).wait(); return 0;}4. QtConcurrent — Qt प्रोजेक्ट्स के लिए
यदि आप Qt का उपयोग करते हैं, तो QtConcurrent::run और QThreadPool कार्य कतार व्यवस्थित करने का एक सरल तरीका है।
#include <QtConcurrent/QtConcurrentRun>#include <iostream>
int main() { QtConcurrent::run([]{ std::cout << "Qt कार्य"; }); QThread::msleep(100); return 0;}std::thread पर सरल कार्य कतार का कार्यान्वयन
यदि आप बाहरी पुस्तकालयों को शामिल नहीं करना चाहते हैं, तो आप अपनी स्वयं की कतार लिख सकते हैं। नीचे C++17 पर एक न्यूनतम कार्यशील उदाहरण है।
#include <iostream>#include <queue>#include <thread>#include <mutex>#include <condition_variable>#include <functional>
class TaskQueue {public: explicit TaskQueue(size_t threads) { for (size_t i = 0; i < threads; ++i) { workers.emplace_back([this] { while (true) { std::function<void()> task; { std::unique_lock<std::mutex> lock(mutex); condition.wait(lock, [this] पुस्तकालय में भी
Kotlin के लिए Redis क्लाइंट: Lettuce, Redisson और Kredis
TypeScript के लिए Swagger/OpenAPI जनरेशन: सर्वश्रेष्ठ टूल्स
Java में Event Bus और Observer पैटर्न: शिथिल-युग्मित आर्किटेक्चर का कार्यान्वयन
Rust में Markdown प्रोसेसिंग: लाइब्रेरी, पार्सर और टूल्स
Go में इमेज प्रोसेसिंग: resize और crop (आकार बदलना और क्रॉप करना)