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 स्वचालित रूप से अपवादों को संभालता है। यदि कोई कार्य अपवाद फेंकता है, तो वह
पुस्तकालय में भी
GuzzleHTTP/Promises PHP: पूर्ण गाइड उदाहरणों के साथ
Kotlin में तिथियों के साथ कार्य: विकास के लिए पुस्तकालय और उपकरण
Kotlin में Prometheus मेट्रिक्स: Micrometer और Ktor के साथ एकीकरण
Redis Java क्लाइंट: Jedis, Lettuce और Redisson - पूरी गाइड
Swift (iOS/macOS) पर ईमेल भेजना: MFMailComposeViewController और SMTP