cmkzjw 发表于 2018-9-19 12:01:00

GoLang之协程

GoLang之协程
  目前,WebServer几种主流的并发模型:


[*]多线程,每个线程一次处理一个请求,在当前请求处理完成之前不会接收其它请求;但在高并发环境下,多线程的开销比较大;
[*]基于回调的异步IO,如Nginx服务器使用的epoll模型,这种模式通过事件驱动的方式使用异步IO,使服务器持续运转,但人的思维模式是串行的,大量回调函数会把流程分割,对于问题本身的反应不够自然;
[*]协程,不需要抢占式调度,可以有效提高线程的任务并发性,而避免多线程的缺点;但原生支持协程的语言还很少。
  协程(coroutine)是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。
  在一个函数调用前加上go关键字,这次调用就会在一个新的goroutine中并发执行。当被调用的函数返回时,这个goroutine也自动结束。需要注意的是,如果这个函数有返回值,那么这个返回值会被丢弃。
  先看下面的例子:
  

func Add(x, y int) {  
z :
= x + y  
fmt.Println(z)
  
}
  

  
func main() {
  
for i:
=0; i
页: [1]
查看完整版本: GoLang之协程