วันอังคารที่ 21 มีนาคม พ.ศ. 2560

Go Language Example 8

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/


ขอบคุณที่เข้ามาดูกันนะคับ


##########ฝากติดตามเพจของพวกเราด้วยนะคับ############







ไม่มีความคิดเห็น:

แสดงความคิดเห็น