go语言中有关通道与协程
1.有无缓冲的通道是否同步
ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步.
ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步.
channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读到数据。
channel有缓冲时,当缓冲满时发送阻塞,当缓冲空时接收阻塞。
2.进程,线程,协程的区别?
进程:资源调度分配的基本单位,上下文切换开销较大
线程:CPU调度分配的基本单位,线程之间通信用共享内存,上下文切换开销较小
协程:用户态的轻量级线程,用户态----由用户控制,轻量级----上下文切换开销小(因为用户控制,不经内核)
3.介绍channel?
Channel是Go中的一个核心类型,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication),Channel也可以理解是一个先进先出的队列,通过管道进行通信。
Golang的Channel,发送一个数据到Channel 和 从Channel接收一个数据 都是 原子性的。而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的。
4.Goroutine如何调度?
5.有关协程同步方法
1.Mutex 2.channel 3.WaitGroup
静,静,静