程序员技术栈

GO语言入门第五节 Go语言的并发编程(一)

2019-06-17  本文已影响3人  団长大人

写在前面

因为并发相关的东西又多又长。。所以这个专题会分成多篇博客来写啦。。
本篇文章包括

Go语言的并发操作(一)

1. Go语言的携程机制

2. Go 语言的共享内存并发机制

3. CSP的并发控制

CSP相当于是通过通道(发送消息)的机制来进行线程通讯。CSP的操作是通过一个Channel来完成的。也就是,这种方式会比使用直接通讯耦合度更低


由于我对我的老本行——java后端的异步调用还不是很熟悉,那我就趁热打铁,写一个Demo实现Java的异步调用

这一部分是使用Java的Callable和FutureTask来完成异步调用,在获取调用结果的时候如果没有完成,主线程就会阻塞直到任务完成。如果不感兴趣可以直接跳到下一个大标题

4. 多路选择和超时(select块的使用)

select块就是用于多个异步调用的多路选择和超时控制。

select语句块类似switch,每一个case里都要使用一个频道(chan类型)来获得数据。只要有一个channel返回了数据,那么这个channel的语句块就会执行。如果都没有返回值,有default语句块的话就会执行default语句块

这里的channel应该提前启动好,当我们要获取结果时再去做相关处理

func TestSelect1(t *testing.T) {
   s := asyncService()
   time.Sleep(time.Millisecond*1000)
   select {
   //这一个语句块是为了做超时处理,10s后如果没有结果他就会返回结果
   //(当然有了default语句块这个语句块也就没有意义了)
   case <-time.After(10*time.Second):
      print("10s")
   case ret := <-s:
      print("result:",ret)
   default:
      t.Error("error")
   }
}
上一篇 下一篇

猜你喜欢

热点阅读