一、什么是CSP
CSP是Communicating sequential processes的缩写,是70年代提出,通过一个通道完成两个实体之间通信的一种机制。我通常将其理解为一个通信队列。

二、通常用法
下图通常被称作buffer channel,是更松耦合的一种通道实现
image.png
即使发送者不在,只要通道中有消息,接收者都可以从通道中拿消息,否则(通道为空)接收者就需要等待。
即使接收者不在,只要通道没有满,发送者都可以向通道中发布消息,否则(通道满)发送者就需要等待。
三、java中的实现

private static FutureTask<String> service(){
    FutureTask<String> task = new FutureTask<String>(()->"Do something");
    new Thread(task).start();
    return task;
}
FutureTask<String> ret = service();
System.out.println("Do something else");
System.out.println(ret.get());

四、go中的实现

func service() string{
   time.Sleep(time.Millisecond*50)
   return "Done"
}
func otherTask(){
   fmt.Printf("working on sth else")
   time.Sleep(time.Millisecond*100)
   fmt.Println("other task is Done")
}
func AsyncRun()chan string{
   retCh := make(chan string,1)
   go func(){
      ret:=service()
      fmt.Println("returned result.")
      retCh<-ret
 fmt.Println("service exited")
   }()
   return retCh
}
func TestAsyncRun(t *testing.T){
   retCh := AsyncRun()
   otherTask()
   fmt.Println(<-retCh)
}

关翔宇
10 声望3 粉丝

即使是一只蜗牛,不停努力的奔跑,也能到达目标


引用和评论

0 条评论