Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

go实现的异步类

NotificationsYou must be signed in to change notification settings

freshcn/async

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

简介

通过golang的goruntine来提供一种异步处理程序的能力。

应用场景

这在多个耗时长的网络请求(如:调用API接口)时非常有用。其可将顺序执行变为并行计算,可极大提高程序的执行效率。也能更好的发挥出多核CPU的优势。

使用

gogetgithub.com/freshcn/async

demo

// 建议程序开启多核支持runtime.GOMAXPROCS(runtime.NumCPU())// 耗时操作1funcrequest1()interface{}{//sql request...}// 耗时操作2funcrequest2()interface{}{//sql request...}// 新建一个async对象async:=async.New()// 添加request1异步请求,第一个参数为该异步请求的唯一logo,第二个参数为异步完成后的回调函数,回调参数类型为func()interface{}async.Add("request1",request1)// 添加request2异步请求async.Add("request2",request2)// 执行ifchans,ok:=async.Run();ok{// 将数据从通道中取回,取回的值是一个map[string]interface{}类型,key为async.Add()时添加的logo,interface{}为该logo回调函数返回的结果res:=<-chans// 这里最好判断下是否所有的异步请求都已经执行成功iflen(res)==2 {fork,v:=rangeres {//do something}}else {log.Println("async not execution all task")}}// 清除掉本次操作的所以数据,方便后续继续使用async对象async.Clean()

About

go实现的异步类

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors2

  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp