Go by Example: Goroutines
Goroutine เป็นความคิดที่ง่ายในการดำเนินการ
• สมมติว่าเรามีฟังก์ชัน
f(s) ต่อไปนี้คือวิธีที่เราเรียกว่าโดยปกติแล้วเรียกใช้งานแบบซิงโครนัส
• เมื่อต้องการเรียกใช้ฟังก์ชันนี้ใน
goroutine ใช้ f (s) ไป
นี้ใหม่ goroutine จะดำเนินการควบคู่ไปกับการเรียกหนึ่ง
• คุณยังสามารถเริ่ม
goroutine สำหรับการเรียกฟังก์ชันที่ไม่ระบุตัวตน
go func(msg string) {
fmt.Println(msg)
}("going")
• การเรียกใช้ฟังก์ชันสองแบบของเรากำลังทำงานแบบ
asynchronously ใน goroutines แยกต่างหากในขณะนี้ดังนั้นการดำเนินการจะตกผ่านไปที่นี่
รหัส Scanln นี้ต้องการให้เรากดปุ่มก่อนที่โปรแกรมจะออก
• เมื่อเราเรียกใช้โปรแกรมนี้เราจะเห็นผลลัพธ์ของการปิดกั้นการโทรก่อนจากนั้นจึงนำเอาผลลัพธ์การแทรกซึมของสอง
gouroutines interleaving นี้สะท้อนให้เห็นถึง goroutines
กำลังทำงานพร้อมกันโดยรันไทม์ Go
Go by Example: Channels
Channels คือท่อที่เชื่อมต่อกัน
คุณสามารถส่งค่าลงในช่องจากหนึ่ง goroutine และได้รับค่าเหล่านั้นลงใน
goroutine อื่น
• สร้าง Channel ใหม่ด้วย Make (chan val-type) Channels ถูกพิมพ์โดยค่าที่ถูกถ่ายทอดมา
• ส่งค่าลงใน Channels โดยใช้ Channel <-
syntax ที่นี่เราจะส่ง "ping" ไปยัง Channels ข้อความที่เราทำไว้ข้างต้นจาก goroutine
ใหม่
• ไวยากรณ์
<-channel จะรับค่าจาก channel
ที่นี่เราจะได้รับข้อความ "ping" ที่เราส่งมาและพิมพ์ออกมา
• เมื่อเราเรียกใช้โปรแกรมข้อความ
"ping" จะถูกส่งผ่านได้สำเร็จจากที่หนึ่งไปยังอีกช่องทางของเรา
• โดยค่าเริ่มต้นจะส่งและรับบล็อกจนกว่าทั้งผู้ส่งและผู้รับจะพร้อม
คุณสมบัตินี้อนุญาตให้เรารอในตอนท้ายของโปรแกรมสำหรับข้อความ "ping"
โดยไม่ต้องใช้การซิงค์อื่น ๆ
Go by Example: Channel Buffering
โดยค่าเริ่มต้น Channels
จะ unbuffered หมายความว่าพวกเขาจะยอมรับการส่ง (chan
<-) ถ้ามีการรับ (<- chan) ที่สอดคล้องกันเพื่อรับค่าที่ส่งมา
แชแนลบัฟเฟอร์ยอมรับค่าที่ จำกัด
โดยไม่มีตัวรับสัญญาณที่สอดคล้องกันสำหรับค่าเหล่านั้น
• ที่นี่เราสร้าง channel ของสตริงที่กำหนดบัฟเฟอร์ได้ถึง
2 ค่า
• เนื่องจาก channel นี้มีการเก็บบัฟเฟอร์ไว้เราจึงสามารถส่งค่าเหล่านี้ไปยังช่องได้โดยไม่ต้องได้รับพร้อม
ๆ กัน
Credit By :https://gobyexample.com/
ขอบคุณที่เข้ามาดูกันนะคับ
##########ฝากติดตามเพจของพวกเราด้วยนะคับ############
ไม่มีความคิดเห็น:
แสดงความคิดเห็น