ในยุคปัจจุบันที่เทคโนโลยีก้าวล้ำไปอย่างรวดเร็ว ความสามารถในด้านการพัฒนาโปรแกรมที่สามารถทำงานได้หลายอย่างพร้อมกันหรือที่เรียกว่า "Concurrency" นับเป็นสิ่งสำคัญที่นักพัฒนาซอฟต์แวร์ไม่ควรมองข้าม หนึ่งในภาษาที่มีการออกแบบให้ง่ายต่อการบริหารจัดการ concurrency ก็คือภาษา Go หรือ Golang ที่รู้กันดีในด้านการรองรับการทำงานพร้อมกันได้อย่างมีประสิทธิภาพ
Concurrency คือความสามารถของโปรแกรมที่จะทำงานหลายอย่างพร้อมกัน เช่น การดาวน์โหลดไฟล์ใหญ่ ๆ พร้อมกับการตรวจสอบข้อมูลจากฐานข้อมูล ในขณะที่การทำงานแบบ Parallelism คือการทำงานหลาย ๆ งานพร้อมกันบนหลาย ๆ Core ของ CPU
Go นั้นได้รับการออกแบบเพื่อให้รองรับ concurrency อย่างมีประสิทธิภาพผ่านการใช้ goroutines และ channels ซึ่งจะช่วยให้นักพัฒนาสามารถสร้างโปรแกรมที่รองรับการทำงานหลายอย่างพร้อมกันได้ง่ายและสะดวก
ใน Go การเปิดใช้งาน goroutine ใหม่คือการเรียกฟังก์ชันด้วยคำสั่ง `go` ซึ่งฟังก์ชันนั้นจะทำงานแบบ async หรือไม่ขัดจังหวะการทำงานหลักของโปรแกรม ตัวอย่างการใช้งาน goroutine มีดังนี้:
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(500 * time.Millisecond)
}
}
func main() {
go printNumbers() // เปิดใช้งาน goroutine
fmt.Println("This is main goroutine!")
// รอให้ goroutine ทำงานเสร็จ
time.Sleep(3 * time.Second)
}
จากตัวอย่างด้านบน โปรแกรมจะพิมพ์ตัวเลขจากฟังก์ชัน `printNumbers()` อย่างต่อเนื่องพร้อมกับพิมพ์ "This is main goroutine!" จากฟังก์ชันหลัก
Channels ใน Go เป็นเครื่องมือที่ใช้สำหรับสื่อสารระหว่าง goroutines โดย channels ช่วยให้ goroutines สามารถแลกเปลี่ยนข้อมูลระหว่างกันได้อย่างปลอดภัย เหมือนเป็นท่อส่งข้อมูล
การสร้าง channel ใหม่นั้นทำได้ดังนี้:
ch := make(chan int)
และการส่งหรือรับข้อมูลผ่าน channels สามารถทำได้ดังนี้:
// ส่งข้อมูลไปยัง channel
ch <- 1
// รับข้อมูลจาก channel
value := <-ch
สำหรับการใช้งาน channels ในโปรแกรมเกี่ยวกับ concurrency มีตัวอย่างการใช้งานดังนี้:
package main
import (
"fmt"
"time"
)
func main() {
messages := make(chan string)
go func() {
time.Sleep(2 * time.Second)
messages <- "Hello from goroutine"
}()
fmt.Println("Waiting for goroutine…")
msg := <-messages
fmt.Println(msg)
}
ในตัวอย่างด้านบนสร้าง channel สำหรับส่งข้อมูลชนิด string มาหนึ่งตัว และภายใน goroutine ได้มีการส่งข้อความ "Hello from goroutine" ผ่าน channel นั้น หลังจากที่ตัวหลักรอจนกว่าจะได้ข้อมูลทำให้โปรแกรมทำหน้าที่เหมือนกับรอการทำงานจาก goroutine
ความสามารถในการทำงานแบบ concurrency ใน Go ช่วยให้นักพัฒนาสามารถสร้างแอพพลิเคชันที่มีการทำงานพร้อมกันได้อย่างมีประสิทธิภาพ Channels เป็นเครื่องมือที่มีประโยชน์ในการแลกเปลี่ยนข้อมูลระหว่าง goroutines ได้อย่างราบรื่น หากคุณสนใจในการพัฒนาหรือใช้ทำงานแบบ concurrency เราเชื่อว่าการศึกษาและทดลองใช้ Go จะช่วยเพิ่มศักยภาพให้กับแนวทางการพัฒนาโปรแกรมของคุณได้อย่างมาก
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com