一、什么是CSP
CSP是Communicating sequential processes的缩写,是70年代提出,通过一个通道完成两个实体之间通信的一种机制。我通常将其理解为一个通信队列。
二、通常用法
下图通常被称作buffer channel,是更松耦合的一种通道实现
即使发送者不在,只要通道中有消息,接收者都可以从通道中拿消息,否则(通道为空)接收者就需要等待。
即使接收者不在,只要通道没有满,发送者都可以向通道中发布消息,否则(通道满)发送者就需要等待。
三、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)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。