0
点赞
收藏
分享

微信扫一扫

Future模式golang实现

何以至千里 2022-01-23 阅读 82
golang

文章目录

Future模式


编程中经常遇到在一个流程中需要调用多个子调用的情况,这些子调用相互之间没有依赖,如果串行地调用,则耗时会很长,此时可以使用并发编程中的future模式。
比如我们发送ajax请求的时候,页面进行后续处理,用户无需一直等待请求的结果,可以继续浏览或操作其他内容。


future 模式的基本工作原理

  1. 使用chan作为函数参数
  2. 启动goroutine调用函数
  3. 通过chan传入参数
  4. 做其他可以并行处理的事情
  5. 通过chan异步获取结果

future模式流程图

在这里插入图片描述


下面是一个简单的例子:

package main

import (
	"fmt"
	"time"
)

// 一个查询结构体
// 这里的sql和result是一个简单的抽象,具体的应用可能是更复杂的数据类型
type query struct {
	// 参数Channel
	sql chan string
	// 结果Channel
	result chan string
}

// 执行Query
func execQuery(q query) {
	// 启动协程
	go func() {
		// 获取输入
		sql := <- q.sql
		// 访问数据库
		// 输出结果通道
		q.result <- "result from" + sql
	}()
}

func main() {
	// 初始化Query
	q := query{make(chan string, 1), make(chan string, 1)}
	// 执行Query, 注意执行的时候无须准备参数
	go execQuery(q)
	// 发送参数
	q.sql <- "select *fome table"

	// 做一些其它的事情, 这里通过Sleep描述
	time.Sleep(time.Second)

	// 获取结果
	fmt.Println(<-q.result)
}

// result from select * from table


其它并发模式


参考资料:

《Go语言核心编程》

举报

相关推荐

0 条评论