Kotlin के लिए कार्य कतारें: Coroutines और KJobQueue

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

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

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

Kotlin के लिए कार्य कतारें: Coroutines और KJobQueue

आधुनिक Kotlin विकास में - चाहे वह Android एप्लिकेशन हो, Ktor पर बैकएंड हो या माइक्रोसर्विस - अक्सर पृष्ठभूमि कार्यों को एसिंक्रोनस रूप से और सही क्रम में निष्पादित करने की आवश्यकता होती है। कार्य कतार (job queue) ऐसे संचालनों को प्रबंधित करने में मदद करती है: फ़ाइल डाउनलोड, डेटा सिंक्रोनाइज़ेशन, एनालिटिक्स भेजना, इमेज प्रोसेसिंग। इस लेख में, हम Kotlin कोरूटीन का उपयोग करके कार्य कतार बनाने का तरीका समझेंगे, साथ ही KJobQueue लाइब्रेरी से परिचित होंगे - जो उन्नत कार्य प्रबंधन के लिए एक हल्का समाधान है।



कार्य कतार की आवश्यकता क्यों है?

कार्य कतार द्वारा हल की जाने वाली मुख्य समस्याएँ:

  • निष्पादन क्रम — कार्यों को संसाधनों के लिए संघर्ष नहीं करना चाहिए।
  • समांतरता की सीमा — उदाहरण के लिए, एक साथ अधिकतम 3 डाउनलोड।
  • त्रुटि प्रबंधन और पुनः प्रयास — विफलता पर कार्य पुनः प्रारंभ किया जा सकता है।
  • प्राथमिकताएँ — तत्काल कार्य पहले निष्पादित होते हैं।
  • पुनरारंभ के प्रति स्थिरता — कतार स्थिति को संग्रहीत कर सकती है।


कोरूटीन पर सरल कतार (Channel)

कतार को लागू करने का सबसे सरल तरीका Channel और कोरूटीन-हैंडलर का उपयोग करना है। उदाहरण:



import kotlinx.coroutines.*import kotlinx.coroutines.channels.Channel

data class Task(val id: Int, val payload: String)

suspend fun processTask(task: Task) { println("कार्य ${task.id} प्रसंस्करण: ${task.payload}") delay(500) // कार्य का अनुकरण}

fun main() = runBlocking { val taskChannel = Channel<Task>(capacity = 10)

// वर्कर प्रारंभ करें val worker = launch { for (task in taskChannel) { processTask(task) } }

// कार्य जोड़ें launch { repeat(5) { i -> taskChannel.send(Task(i, "डेटा $i")) } taskChannel.close() }

worker.join()}


यह दृष्टिकोण सरल परिदृश्यों के लिए उपयुक्त है, लेकिन प्राथमिकताओं, पुनरावृत्ति और स्थिति संरक्षण का समर्थन नहीं करता है।



KJobQueue — उन्नत कतार के लिए लाइब्रेरी

KJobQueue (GitHub पर उपलब्ध) Kotlin के लिए एक हल्की लाइब्रेरी है, जो कोरूटीन के ऊपर बनी है। यह प्रदान करती है:

  • प्राथमिकताओं वाली कतार (Comparable पर आधारित)।
  • समांतरता की सीमा (एक साथ निष्पादित कार्यों की संख्या)।
  • विलंब के साथ स्वचालित पुनः प्रयास।
  • रद्द करने और रोकने का समर्थन।
  • अनुकूलन योग्य डिस्पैचर (थ्रेड पूल)।


स्थापना

build.gradle.kts में जोड़ें:

dependencies {    implementation("io.github.kjobqueue:kjobqueue-core:1.0.0")}


KJobQueue के उपयोग का उदाहरण

import io.github.kjobqueue.*import kotlinx.coroutines.*import kotlin.random.Random

class DownloadJob(val url: String, override val priority: Int = 0) : PriorityJob { override suspend fun execute() { println("$url डाउनलोड हो रहा है (प्राथमिकता $priority)") delay(1000) if (Random.nextBoolean()) throw RuntimeException("नेटवर्क त्रुटि") }}

fun main() = runBlocking { val queue = JobQueue( maxConcurrent = 2, // एक साथ अधिकतम 2 कार्य retryDelayMs = 500L, // पुनः प्रयास से पहले विलंब maxRetries = 3 // अधिकतम 3 पुनः प्रयास )

queue.add(DownloadJob("https://example.com/file1", priority = 5)) queue.add(DownloadJob("https://example.com/file2", priority = 1)) queue.add(DownloadJob("https://example.com/file3", priority = 10))

delay(5000) // निष्पादन के लिए समय दें queue.shutdown()}


त्रुटि प्रबंधन और पुनः प्रयास

KJobQueue स्वचालित रूप से अपवादों को संभालता है। यदि कोई कार्य अपवाद फेंकता है, तो वह

अनुशंसाएँ