不懂就问,Go语言的通道是不是类似于栈,先入后出?【滑稽】

不懂就问,Go语言的通道是不是类似于栈,先入后出?【滑稽】

channel是GO语言并发体系中的主推的通信机制,channel是一种特殊的类型是保证协程安全的,也就是在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。

遵循先入先出(First In First Out)的规则,类似于队列,保证收发数据的顺序。这两个特性是channel可以产生共享内存功能的重要原因。

package main

import (
	"fmt"
)

func sum(a []int, c chan int) {
	tot := 0
	for _, j := range a {
		tot += j
	}
	c <- tot
}
func main() {
	a := []int{1, 2, 3, 4, 5, 6}
	c := make(chan int)
	go sum(a[:3], c)
	go sum(a[3:], c)
	x := <-c
	y := <-c
	fmt.Println("x = ", x, "y = ", y, "x+y = ", x+y)
}

如果是先入先出,那么这段代码中通道c不是先入6,再入15,那么按照先入先出原则:x应该为6,y应该为15,为什么结果却相反?