CSP并发机制
一、什么是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)
}
狂奔的蜗牛
带着敬畏之心,记录、积累对于技术的理解
推荐阅读
下一次技术革命的思考
互联网革命已经为下一次技术革命夯实了坚实的基础,积累了海量的用户数据,行为数据,以及世界信息,物体,能量流动的数据,有了这些数据的积累,分析,训练,使用,让数据的使用者更容易看清世界的变化趋势,人...
关翔宇阅读 344
[go] chan close
close由发送端调用,在收到最后一个发送值后关闭管道(It should be executed only by the sender, never the receiver, and has the effect of shutting down the channel after the last sent value is received)
天策上将阅读 352
用golang的channel特性,来做简易分拣机的中控部分
先介绍一下项目的背景,之前单位有一个做小型快递分拣机的需求,针对小型包裹智能分拣到不通的出口。大致的物理传送带如下方图所示,原谅我不会画图。此文章的目的,只是给大家展示一下golang channel的用处。
这个名字好长阅读 257
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。