golang channel 阻塞与非阻塞区别

分析发送chanel的过程

1、非阻塞模式

if !block {
   unlock(&c.lock)
   return false
}

非阻塞模式下,在 c.qcount >= c.dataqsiz 时候,也就是在channel满的时候直接返回

非阻塞模式实现是用 select

var c chan

select {
    case ->c:
        fmt.Printf("Hello world")
    default:
        fmt.Printf("Hello default")
}

2、阻塞模式下

阻塞模式下,在 c.qcount >= c.dataqsiz 时候,也就是在channel满的时候,park()函数,使p与g detached

你可能感兴趣的:(golang,golang)