YGNCodeAI နှင့်နည်းပညာအမေးအဖြေ

မှတ်ချက်။ AI ပြောတိုင်းအမှန်မဟုတ်ပါဘူး၊ တခါတလေသူကအမှားတွေပါပြောတက်ပါတယ်။ ကိုယ်ပိုင်စဥ်းစားဆင်ခြင်ဆုံးဖြတ်ပါ။

Set Kyar Wa Lar 18 Sep 2024, 7:58 am

PHP/Laravel မှာဆို queue worker ဆိုပီးနှေးတဲ့ task တွေကို queue ထဲထည့်ပီး worker နဲ့ process လုပ်တယ်။ အဲ့လိုမျိုးကို golang goroutine နဲ့နမူနာတခုလောက်လုပ်ပြပေးပါ။

ဟုတ်ကဲ့။ Golang မှာ goroutine သုံးပြီး queue worker လုပ်ဆောင်ချက်ကို အောက်ပါအတိုင်း နမူနာ ရေးပြပေးပါမယ်။

package main

import (
    "fmt"
    "time"
)

// Task ဆိုတဲ့ struct ကို သတ်မှတ်ပါတယ်
type Task struct {
    ID   int
    Name string
}

// Queue ကို channel အနေနဲ့ သတ်မှတ်ပါတယ်
var queue = make(chan Task, 100)

// worker function
func worker(id int) {
    for task := range queue {
        fmt.Printf("Worker %d is processing task: %d - %s\n", id, task.ID, task.Name)
        time.Sleep(time.Second) // နှေးတဲ့ task ကို simulate လုပ်ဖို့
    }
}

func main() {
    // worker 3 ခု စတင်ပါတယ်
    for i := 1; i <= 3; i++ {
        go worker(i)
    }

    // task တွေကို queue ထဲ ထည့်ပါတယ်
    for i := 1; i <= 10; i++ {
        task := Task{
            ID:   i,
            Name: fmt.Sprintf("Task %d", i),
        }
        queue <- task
    }

    // main goroutine ကို ခဏရပ်ထားပါတယ်
    time.Sleep(time.Second * 15)
}

ဒီ code မှာ:

  1. Task struct ကို သတ်မှတ်ထားပါတယ်။
  2. queue ကို buffered channel အဖြစ် သတ်မှတ်ထားပါတယ်။
  3. worker function က task တွေကို queue ကနေ ယူပြီး process လုပ်ပါတယ်။
  4. main function မှာ worker သုံးခုကို goroutine အနေနဲ့ စတင်ပါတယ်။
  5. ပြီးရင် task 10 ခုကို queue ထဲ ထည့်ပါတယ်။
  6. နောက်ဆုံးမှာ main goroutine ကို 15 စက္ကန့် ရပ်ထားပါတယ်။ ဒါမှ worker တွေ အလုပ်လုပ်နိုင်မှာပါ။

ဒီ နမူနာမှာ goroutine တွေက PHP/Laravel မှာလို queue worker တွေလို အလုပ်လုပ်ပါတယ်။ Task တွေကို parallel process လုပ်နိုင်ပြီး၊ ပြီးသွားတဲ့ task နေရာမှာ နောက် task တွေကို ဆက်လုပ်နိုင်ပါတယ်။

ပြန်လည်မျှဝေပါ... Facebook Twitter LinkedIn WhatsApp Telegram