CSP并发机制

比特织网者
• 阅读 3156

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

二、通常用法
下图通常被称作buffer channel,是更松耦合的一种通道实现
CSP并发机制
即使发送者不在,只要通道中有消息,接收者都可以从通道中拿消息,否则(通道为空)接收者就需要等待。
即使接收者不在,只要通道没有满,发送者都可以向通道中发布消息,否则(通道满)发送者就需要等待。
三、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)
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
Kerberos无约束委派的攻击和防御
 0x00前言简介当ActiveDirectory首次与Windows2000Server一起发布时,Microsoft就提供了一种简单的机制来支持用户通过Kerberos对Web服务器进行身份验证并需要授权用户更新后端数据库服务器上的记录的方案。这通常被称为Kerberosdoublehopissue(双跃点问题),
Easter79 Easter79
3年前
SpringBoot如何优雅的使用RocketMQ
目录SpringBoot如何优雅的使用RocketMQ什么是RocketMQ?RocketMQ环境安装SpringBoot环境中使用RocketMQSpringBoot如何优雅的使用RocketMQMQ,是一种跨进程的通信机制,用于上下游传递消息。在传统的互联网架构中通常使用M
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
MQ study
1\.什么是MQ?消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同
Wesley13 Wesley13
3年前
GO语言网络编程
socket编程Socket是BSDUNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上运行的应用程序通常通过”套接字”向网络发出请求或者应答网络请求。Socke
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
比特织网者
比特织网者
Lv1
有情知望乡,谁能鬒不变?
文章
4
粉丝
0
获赞
0