คำถามติดแท็ก goroutine

12
วิธีการเรียกใช้เมธอดแบบอะซิงโครนัสใน Java
เมื่อเร็ว ๆ นี้ฉันได้ดู goroutines ของ Goและคิดว่าคงจะดีถ้ามีอะไรที่คล้ายกันใน Java เท่าที่ฉันได้ค้นหาวิธีทั่วไปในการขนานการเรียกเมธอดคือทำสิ่งต่างๆเช่น: final String x = "somethingelse"; new Thread(new Runnable() { public void run() { x.matches("something"); } }).start(); นั่นไม่สง่างามมาก มีวิธีที่ดีกว่านี้หรือไม่? ฉันต้องการโซลูชันดังกล่าวในโปรเจ็กต์ดังนั้นฉันจึงตัดสินใจใช้คลาส wrapper ของฉันเองโดยใช้การเรียกเมธอด async ฉันตีพิมพ์ระดับกระดาษห่อของฉันในJ-Go แต่ฉันไม่รู้ว่ามันเป็นทางออกที่ดีหรือเปล่า การใช้งานนั้นง่ายมาก: SampleClass obj = ... FutureResult<Integer> res = ... Go go = new Go(obj); go.callLater(res, "intReturningMethod", 10); //10 …

5
จะรอให้ goroutines ทั้งหมดเสร็จได้อย่างไรโดยไม่ต้องใช้เวลานอนหลับ?
รหัสนี้เลือกไฟล์ xml ทั้งหมดในโฟลเดอร์เดียวกันเนื่องจากไฟล์ปฏิบัติการที่เรียกใช้และอะซิงโครนัสจะใช้การประมวลผลกับแต่ละผลลัพธ์ในวิธีการโทรกลับ (ในตัวอย่างด้านล่างจะพิมพ์เฉพาะชื่อของไฟล์เท่านั้น) ฉันจะหลีกเลี่ยงการใช้วิธีการนอนหลับเพื่อป้องกันไม่ให้วิธีหลักออกไปได้อย่างไร? ฉันมีปัญหาในการห่อหัวของฉันไปรอบ ๆ ช่อง (ฉันคิดว่านั่นคือสิ่งที่ต้องใช้ในการซิงโครไนซ์ผลลัพธ์) ดังนั้นขอขอบคุณความช่วยเหลือใด ๆ ! package main import ( "fmt" "io/ioutil" "path" "path/filepath" "os" "runtime" "time" ) func eachFile(extension string, callback func(file string)) { exeDir := filepath.Dir(os.Args[0]) files, _ := ioutil.ReadDir(exeDir) for _, f := range files { fileName := f.Name() if extension …

3
ตัวอย่างสำหรับ sync.WaitGroup ถูกต้องหรือไม่
ตัวอย่างการใช้งานนี้sync.WaitGroupถูกต้องหรือไม่? มันให้ผลลัพธ์ที่คาดหวัง แต่ฉันไม่แน่ใจเกี่ยวกับตำแหน่งwg.Add(4)และตำแหน่งของwg.Done(). การเพิ่ม goroutines สี่ตัวพร้อมกันนั้นสมเหตุสมผลwg.Add()หรือไม่? http://play.golang.org/p/ecvYHiie0P package main import ( "fmt" "sync" "time" ) func dosomething(millisecs time.Duration, wg *sync.WaitGroup) { duration := millisecs * time.Millisecond time.Sleep(duration) fmt.Println("Function in background, duration:", duration) wg.Done() } func main() { var wg sync.WaitGroup wg.Add(4) go dosomething(200, &wg) go dosomething(400, &wg) go dosomething(150, &wg) …
108 go  goroutine 

6
วิธีหยุดโกรูทีน
ฉันมี goroutine ที่เรียกใช้เมธอดและส่งค่าที่ส่งคืนในช่อง: ch := make(chan int, 100) go func(){ for { ch <- do_stuff() } }() ฉันจะหยุด goroutine ได้อย่างไร?
107 go  goroutine  channels 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.