Kotlin में कार्य कतारें: Coroutines, KJob और उन्नत पैटर्न

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin के लिए कार्य कतारें: Coroutines से उन्नत समाधान तक

\n\n

Kotlin में आधुनिक विकास में, कार्य कतारें (task queues) उत्तरदायी और स्केलेबल अनुप्रयोगों के निर्माण के लिए महत्वपूर्ण भूमिका निभाती हैं। चाहे आप Ktor पर सर्वर एप्लिकेशन, Android के लिए मोबाइल एप्लिकेशन, या Compose पर डेस्कटॉप समाधान बना रहे हों, कार्यों के अतुल्यकालिक प्रसंस्करण के तंत्र को समझना एक अनिवार्य कौशल है। इस लेख में, हम Kotlin में कार्य कतारों के साथ काम करने के लिए बुनियादी उपकरणों, पुस्तकालयों और पैटर्न का विश्लेषण करेंगे।

\n\n

1. अंतर्निहित उपकरण: Kotlin Coroutines

\n\n

पहली चीज़ जिससे शुरुआत करनी चाहिए वह है Kotlin Coroutines। वे हल्के थ्रेड (coroutines) और चैनलों (Channel) और डिस्पैचर्स (Dispatcher) के माध्यम से अंतर्निहित कतारें प्रदान करते हैं।

\n\n

चैनलों पर कतार का मूल उदाहरण:

\n\n
import kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.Channel\n\nfun main() = runBlocking {\n    val channel = Channel<String>(capacity = 10) // बफ़र की गई कतार\n\n    // उत्पादक\n    launch {\n        repeat(5) {\n            channel.send("कार्य №${it + 1}")\n            delay(100)\n        }\n        channel.close()\n    }\n\n    // उपभोक्ता\n    launch {\n        for (task in channel) {\n            println("प्रसंस्करण कर रहा हूँ: $task")\n            delay(200)\n        }\n    }\n}\n
\n\n

यह पैटर्न एक या अधिक उपभोक्ताओं के साथ सरल कतारें बनाने की अनुमति देता है। हालाँकि, जटिल परिदृश्यों (प्राथमिकताएँ, विफल कार्यों का पुनरारंभ, निगरानी) के लिए विशेष पुस्तकालयों की आवश्यकता होती है।

\n\n

2. KJob — पृष्ठभूमि कार्यों के लिए पुस्तकालय

\n\n

KJob (Kotlin Job Queue) प्राथमिकताओं, पुनः प्रयासों और स्थिति ट्रैकिंग के समर्थन के साथ पृष्ठभूमि कार्यों के प्रबंधन के लिए एक हल्का पुस्तकालय है। यह कोरुटीन के ऊपर बनाया गया है और Android और सर्वर अनुप्रयोगों के लिए आदर्श है।

\n\n

स्थापना (Gradle):

\n
dependencies {\n    implementation("com.github.kjob:kjob:0.6.0")\n}
\n\n

उपयोग का उदाहरण:

\n\n
import com.github.kjob.*\nimport kotlinx.coroutines.runBlocking\n\nfun main() = runBlocking {\n    val queue = KJobQueue()\n\n    // प्राथमिकता के साथ कार्य जोड़ें\n    queue.add(KJob("high-priority") {\n        println("महत्वपूर्ण कार्य निष्पादित हो रहा है")\n    }.priority(10))\n\n    queue.add(KJob("low-priority") {\n        println("गैर-महत्वपूर्ण कार्य निष्पादित हो रहा है")\n    }.priority(1))\n\n    // प्रसंस्करण शुरू करें\n    queue.processAll()\n}\n
\n\n

KJob समर्थन करता है:

\n
    \n
  • प्राथमिकताएँ — उच्च प्राथमिकता वाले कार्य पहले निष्पादित होते हैं।
  • \n
  • पुनः प्रयास — त्रुटियों पर स्वचालित पुनरारंभ।
  • \n
  • टाइम-आउट — निष्पादन समय की सीमा।
  • \n
  • जीवनचक्र घटनाएँ — प्रारंभ, समाप्ति, त्रुटि पर सदस्यता ली जा सकती है।
  • \n
\n\n

3. KQueue — वितरित कतारें

\n\n

यदि आपको वितरित कार्य कतार की आवश्यकता है (उदाहरण के लिए, माइक्रोसर्विसेज के लिए), तो KQueue पर ध्यान दें। यह शुद्ध Kotlin में लिखा गया Redis या Kafka के माध्यम से कतारों के साथ काम करने के लिए एक पुस्तकालय है।

\n\n

Redis के साथ उदाहरण:

\n\n
import com.kqueue.*\nimport io.lettuce.core.RedisClient\n\nfun main() {\n    val client = RedisClient.create("redis://localhost")\n    val queue = KQueue(client)\n\n    // कार्य भेजें\n    queue.push("orders", "ऑर्डर #123 संसाधित करें")\n\n    // कार्यों का उपभोग करें\n    queue.poll("orders") { task ->\n        println("कार्य प्राप्त हुआ: ${task.body}")\n        // प्रसंस्करण...\n        task.ack() // निष्पादन की पुष्टि\n    }\n}\n
\n\n

KQueue सुनिश्चित करता है:

\n
    \n
  • गारंटीकृत वितरण (at-least-once)।
  • \n
  • कार्य प्रक्रियाओं के बीच लोड संतुलन।
  • \n
  • विलंबित कार्यों (scheduled tasks) के लिए समर्थन।
  • \n
  • Prometheus मीट्रिक के माध्यम से निगरानी।
  • \n
\n\n

4. उन्नत

अनुशंसाएँ