更复杂的场景如何做并发控制呢?比如子协程中开启了新的子协程,或者需要同时控制多个子协程。这种场景下,select+chan
的方式就显得力不从心了。Go 语言提供了 Context 标准库可以解决这类场景的问题,Context 的作用和它的名字很像,上下文,即子协程的下上文。Context 有两个主要的功能:
- 通知子协程退出(正常退出,超时退出等);
- 传递必要的参数。
更复杂的场景如何做并发控制呢?比如子协程中开启了新的子协程,或者需要同时控制多个子协程。这种场景下,select+chan
的方式就显得力不从心了。Go 语言提供了 Context 标准库可以解决这类场景的问题,Context 的作用和它的名字很像,上下文,即子协程的下上文。Context 有两个主要的功能:
注意:多个并发协程之间不需要通信,那么就可以使用 sync.WaitGroup
如果并发启动了多个子协程,需要等待所有的子协程完成任务,WaitGroup 非常适合于这类场景
select主要用于实现多路监听、实现超时处理
select是Go中的一个控制结构,类似于switch语句,用于处理异步I0操作
报错信息:an: preconv: Bad system call (core dumped) man: nroff: Bad system call (core dumped)
找到的原因是man 的版本与linux 的SECCOMP 机制有冲突。找到方法,禁用MAN 的SECCOMP。
临时使用:
MAN_DISABLE_SECCOMP=1 man ls
设到环境变理后:
export MAN_DISABLE_SECCOMP=1
就可以直接使用,不用每次都加MAN_DISABLE_SECCOMP=1这句。
具体问题待解决~