Go Channel คืออะไร ?

Programmer 20 พ.ค. 2022

Channel คือ ช่องทางสำหรับการสื่อสารระหว่าง Go Routines กับ ตัวโปรแกรมหลัก หรือ Go Routines ตัวอื่นๆ

ซึ่ง Go Routines มันจะไปทำงานเบื้องหลังโดยจะแบ่งการทำงานไปให้ CPU Core อื่นช่วยในการทำงานแต่ว่าเมื่อ Go Routines ทำงานสำเร็จจะส่งผลของการทำงานกลับมาได้อย่างไร ?? 🤔🤔🤔
ใช่ครับคนที่จะส่งผล ของการทำงานมา นั่นก็คือ Channel นั่นเองงงงง เปรียบเสมือน เส้นทางในการส่งค่ากลับมายังตัวโปรแกรมหลัก

ยกตัวอย่างเช่น

แม่นายน็อตใช้ให้ นายน็อต ไปซื้อของในตลาด A, B, C, และ D โดยที่มีนายมอสอาสาช่วยในการซื้อของที่ตลาด C, D การทำงานของ Go Routines จะเป็น

  1. นายน็อต ซื้อ ลูกชิ้นปิ้ง ที่ตลาด A ใช้เวลา 1 วินาที
  2. นายน็อต ซื้อ ข้าวมันไก่ ที่ตลาด B ใช้เวลา 1 วินาที
  3. นายมอส ซื้อ ยำวุ้นเส้น ที่ตลาด C ใช้เวลา 1 วินาที
  4. นายมอส ซื้อ น้ำเก๊กฮวย ที่ตลาด D ใช้เวลา 1 วินาที
การทำงานของ Go Routines จะทำการรวมเวลากันได้เป็น 2 วินาที แต่ว่าจะเห็นว่า นายมอส ไม่ได้เอาของที่ซื้อมาให้ นายน็อต เลย เหมือนกับว่าเป็นการทำงานที่ต่างคนต่างทำก็จบไป

แต่ว่าถ้าเป็น Channel หล่ะจะเป็นอย่างไร ?? 🤔🤔

ก็จะต่อเนื่องจากสถานการณ์คือ นายมอส จะต้องนำของที่ซื้อมาคืนนายน็อตด้วย โดยใช้ Channel นั่นเองงงง โดยที่ นายน็อต ก็ต้องรอจนกว่านายมอส จะเอาของที่ซื้อมาให้ด้วย จึงจะจบการทำงานได้

โดยจะเขียนสถานการณ์ได้แบบนี้

  1. นายมอส ซื้อ ยำวุ้นเส้น ที่ตลาด C ใช้เวลา 1 วินาที
  2. นายมอส ซื้อ น้ำเก๊กฮวย ที่ตลาด D ใช้เวลา 1 วินาที
  3. เมื่อ นายมอส ซื้อ ของเสร็จแล้ว ให้นำของไปให้นายน็อต
  4. นายน็อต ซื้อ ลูกชิ้นปิ้ง ที่ตลาด A ใช้เวลา 1 วินาที
  5. นายน็อต ซื้อ ข้าวมันไก่ ที่ตลาด B ใช้เวลา 1 วินาที
  6. นายน็อต รอรับของจากนายมอส

Reference

ภาษา Go ตอน 6 การใช้ Channel ร่วมกับ Go Routines
จากบทที่แล้ว ในตอนที่ 5 เรารู้ว่า Go Routines คืออะไร ใช้ยังไง และทำไมมันถึงทำให้โปรแกรมของเรานั้นมันเร็วขึ้นกันแล้ว ใครยังไม่อ่าน…

Tags