栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Future模式golang实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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语言核心编程》

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号