Голанг асинхронно
Возможность асинхронной обработки программы обеспечивается через goroutine в golang.
Это особенно полезно при множественных длительных сетевых запросах (например, вызов API-интерфейсов). Это может превратить последовательное выполнение в параллельные вычисления и значительно повысить эффективность выполнения программы. Также это позволяет лучше использовать преимущества многоядерных процессоров.
go get github.com/freshcn/async
// Рекомендуется включить поддержку нескольких ядер
runtime.GOMAXPROCS(runtime.NumCPU())
// Затратная операция 1
func request1()interface{}{
//sql запрос...
}
// Затратная операция 2
func request2()interface{}{
//sql запрос...
}
// Создание нового объекта async
async:=new async.New()
// Добавление асинхронного запроса request1, первый параметр — уникальный логотип этого асинхронного запроса, второй параметр — функция обратного вызова после завершения асинхронного процесса, тип параметра функции обратного вызова — func()interface{}
async.Add("request1",request1)
// Добавление асинхронного запроса request2
async.Add("request2",request2)
// Выполнение
if chans,ok := async.Run();ok{
// Извлечение данных из канала, значение имеет тип map[string]interface{}, key — логотип, добавленный при async.Add(), interface{} — результат, возвращаемый функцией обратного вызова
res := <-chans
// Здесь рекомендуется проверить, были ли все асинхронные запросы успешно выполнены
if len(res) == 2 {
for k, v := range res {
//do something
}
} else {
log.Println("async not execution all task")
}
}
// Очистка всех данных текущей операции для удобства последующего использования объекта async
async.Clean()
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )