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语言核心编程》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)