Future模式golang实现

Future模式golang实现,第1张

Future模式golang实现

文章目录

Future模式其它并发模式

Future模式

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


future 模式的基本工作原理:

    使用chan作为函数参数启动goroutine调用函数通过chan传入参数做其他可以并行处理的事情通过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语言核心编程》

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5712480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存