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

 

posted @ 2021-03-01 12:13  爱晒太阳的懒猫。。  阅读(56)  评论(0编辑  收藏  举报