西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发其它知识 → Go语言并发之美:解释其中内核、外延

Go语言并发之美:解释其中内核、外延

相关软件相关文章发表评论 来源:微博时间:2012/11/28 13:47:54字体大小:A-A+

作者:颜开点击:71次评论:0次标签: Go语言

Flash版LOGO语言V9.8 免费简体中文版
  • 类型:编程工具大小:3.2M语言:中文 评分:6.3
  • 标签:
立即下载
4 页 Future技术

Future技术

Future是一个很有用的技术,我们常常使用Future来操作线程。我们可以在使用线程的时候,可以创建一个线程,返回Future,之后可以通过它等待结果。  但是在协程环境下的Future可以更加彻底,输入参数同样可以是Future的。

调用一个函数的时候,往往是参数已经准备好了。调用协程的时候也同样如此。但是如果我们将传入的参 数设为通道,这样我们就可以在不准备好参数的情况下调用函数。这样的设计可以提供很大的自由度和并发度。函数调用和函数参数准备这两个过程可以完全解耦。 下面举一个用该技术访问数据库的例子。

//一个查询结构体

typequery struct {

         //参数Channel

         sql chan string

         //结果Channel

         result chan string

}

//执行Query

funcexecQuery(q query) {

         //启动协程

         go func() {

                   //获取输入

                   sql := <-q.sql

                   //访问数据库,输出结果通道

                   q.result <- "get" + sql

         }()

}

funcmain() {

         //初始化Query

         q :=

                   query{make(chan string, 1),make(chan string, 1)}

         //执行Query,注意执行的时候无需准备参数

         execQuery(q)

         //准备参数

         q.sql <- "select * fromtable"

         //获取结果

         fmt.Println(<-q.result)

}

        上面利用Future技术,不单让结果在Future获得,参数也是在Future获取。准备好参数后,自动执行。Future和生成器的区别在 于,Future返回一个结果,而生成器可以重复调用。还有一个值得注意的地方,就是将参数Channel和结果Channel定义在一个结构体里面作为 参数,而不是返回结果Channel。这样做可以增加聚合度,好处就是可以和多路复用技术结合起来使用。

        Future技术可以和各个其他技术组合起来用。可以通过多路复用技术,监听多个结果Channel,当有结果后,自动返回。也可以和生成器组合使用,生 成器不断生产数据,Future技术逐个处理数据。Future技术自身还可以首尾相连,形成一个并发的pipe filter。这个pipe filter可以用于读写数据流,操作数据流。

        Future是一个非常强大的技术手段。可以在调用的时候不关心数据是否准备好,返回值是否计算好的问题。让程序中的组件在准备好数据的时候自动跑起来。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据