MST
星途 面试题库

面试题:Go语言中Future模式如何实现并发任务处理

请简述在Go语言中实现Future模式以加速并发任务处理的基本原理和步骤,并给出一个简单的示例代码,说明如何创建并发任务、获取任务结果。
38.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

基本原理

  1. Future模式:是一种异步编程模型,将任务的执行和结果的获取分离。在Go语言中,通过goroutine实现异步任务执行,通过channel来传递任务的结果。当一个任务启动时,立即返回一个Future对象(在Go中可理解为一个channel),调用者可以继续执行其他任务,之后通过这个Future对象来获取任务的执行结果。

实现步骤

  1. 创建任务:使用goroutine启动并发任务。
  2. 创建结果通道:定义一个channel用于传递任务的执行结果。
  3. 执行任务并发送结果:在goroutine中执行任务,并将结果通过channel发送出去。
  4. 获取结果:在需要结果的地方从channel接收结果。

示例代码

package main

import (
    "fmt"
)

// 模拟一个耗时任务
func longRunningTask() int {
    // 这里模拟一个耗时操作,例如计算等
    var result int
    for i := 0; i < 1000000; i++ {
        result += i
    }
    return result
}

func main() {
    // 创建一个用于接收任务结果的通道
    resultChan := make(chan int)

    // 使用goroutine启动任务
    go func() {
        result := longRunningTask()
        resultChan <- result
    }()

    // 这里可以继续执行其他任务

    // 获取任务结果
    result := <-resultChan
    fmt.Println("任务结果:", result)
    // 关闭通道,虽然这里不是必须,但是良好的习惯
    close(resultChan)
}

在上述代码中:

  1. longRunningTask函数模拟了一个耗时的任务。
  2. main函数中,创建了一个int类型的channel resultChan用于接收任务结果。
  3. 使用go关键字启动一个goroutine来执行longRunningTask,并将结果发送到resultChan
  4. 最后从resultChan接收结果并打印。