Go Channel คืออะไร ?
Channel คือ ช่องทางสำหรับการสื่อสารระหว่าง Go Routines กับ ตัวโปรแกรมหลัก หรือ Go Routines ตัวอื่นๆ
ซึ่ง Go Routines มันจะไปทำงานเบื้องหลังโดยจะแบ่งการทำงานไปให้ CPU Core อื่นช่วยในการทำงานแต่ว่าเมื่อ Go Routines ทำงานสำเร็จจะส่งผลของการทำงานกลับมาได้อย่างไร ?? 🤔🤔🤔
ใช่ครับคนที่จะส่งผล ของการทำงานมา นั่นก็คือ Channel นั่นเองงงงง เปรียบเสมือน เส้นทางในการส่งค่ากลับมายังตัวโปรแกรมหลัก
ยกตัวอย่างเช่น
แม่นายน็อตใช้ให้ นายน็อต ไปซื้อของในตลาด A, B, C, และ D โดยที่มีนายมอสอาสาช่วยในการซื้อของที่ตลาด C, D การทำงานของ Go Routines จะเป็น
- นายน็อต ซื้อ ลูกชิ้นปิ้ง ที่ตลาด A ใช้เวลา 1 วินาที
- นายน็อต ซื้อ ข้าวมันไก่ ที่ตลาด B ใช้เวลา 1 วินาที
- นายมอส ซื้อ ยำวุ้นเส้น ที่ตลาด C ใช้เวลา 1 วินาที
- นายมอส ซื้อ น้ำเก๊กฮวย ที่ตลาด D ใช้เวลา 1 วินาที
การทำงานของ Go Routines จะทำการรวมเวลากันได้เป็น 2 วินาที แต่ว่าจะเห็นว่า นายมอส ไม่ได้เอาของที่ซื้อมาให้ นายน็อต เลย เหมือนกับว่าเป็นการทำงานที่ต่างคนต่างทำก็จบไป
แต่ว่าถ้าเป็น Channel หล่ะจะเป็นอย่างไร ?? 🤔🤔
ก็จะต่อเนื่องจากสถานการณ์คือ นายมอส จะต้องนำของที่ซื้อมาคืนนายน็อตด้วย โดยใช้ Channel นั่นเองงงง โดยที่ นายน็อต ก็ต้องรอจนกว่านายมอส จะเอาของที่ซื้อมาให้ด้วย จึงจะจบการทำงานได้
โดยจะเขียนสถานการณ์ได้แบบนี้
- นายมอส ซื้อ ยำวุ้นเส้น ที่ตลาด C ใช้เวลา 1 วินาที
- นายมอส ซื้อ น้ำเก๊กฮวย ที่ตลาด D ใช้เวลา 1 วินาที
- เมื่อ นายมอส ซื้อ ของเสร็จแล้ว ให้นำของไปให้นายน็อต
- นายน็อต ซื้อ ลูกชิ้นปิ้ง ที่ตลาด A ใช้เวลา 1 วินาที
- นายน็อต ซื้อ ข้าวมันไก่ ที่ตลาด B ใช้เวลา 1 วินาที
- นายน็อต รอรับของจากนายมอส