Введение
Пул корутин.
Архитектура
Предоставляются два вида пулов корутин: многоразовые/динамические с созданием и уничтожением, в режиме отладки можно собирать статистику по тайм-аутам и сбоям задач.
Установка
go get gitee.com/xiawucha365/sgpool
Использование
Конкретному worker'у необходимо реализовать интерфейс WorkerInterface.
type WorkerInterface interface {
Task() error
GetTaskID() interface{}
}
package main
import (
"fmt"
"math/rand"
"gitee.com/xiawucha365/sgpool"
"time"
)
//======================woker实现===start=====================\\
type workersp struct {
ID string
}
//Список задач для выполнения
var name_slices_sp = []string{"001", "002", "003", "004", "005", "006", "007", "008", "009"}
func (m *workersp) Task() error {
//fmt.Println("job:" + m.ID + "runing...")
timen := rand.Intn(3)
//fmt.Println(timen,"seconds")
time.Sleep(time.Second * time.Duration(timen))
fmt.Println("job:" + m.ID + "over")
return nil
}
//Получение задачи id, удобно
func (m *workersp) GetTaskID() interface{} {
return m.ID
}
//======================woker实现===end=====================\\
//Пример демонстрации
func main() {
//Создание пула корутин
//timeout=0 отключает сбор статистики по тайм-аутам debug=true включает режим отладки
spool := sgpool.NewSPool(3, cap(name_slices_sp), 2, true)
//Отправка задач
for _, id := range name_slices_sp {
np := workersp{ID: id}
spool.Commit(&np)
}
spool.Release()
time.Sleep(time.Second * 1)
}
package main
import (
"fmt"
"math/rand"
"gitee.com/xiawucha365/sgpool"
"time"
)
//======================woker实现===start=====================\\
type worker struct {
ID string
}
//Список задач для выполнения
var name_slices = []string{"001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011"}
func (m *worker) Task() error {
fmt.Println("job:" + m.ID + "running...")
timen := rand.Intn(3)
//fmt.Println(timen,"seconds")
time.Sleep(time.Second * time.Duration(timen))
fmt.Println("job:" + m.ID + "over")
return nil
}
//Получение задачи id, удобно
func (m *worker) GetTaskID() interface{} {
return m.ID
}
//======================woker实现===end=====================\\
//Экземпляр пула корутин
var wpool *sgpool.WPool
//Пример демонстрации
func main() {
//Создание пула корутин
//timeout=0 отключает сбор статистики по тайм-аутам debug=true включает режим отладки
wpool = sgpool.NewWPool(100, cap(name_slices), 0, true)
//Отправка задач
for _, id := range name_slices {
np := worker{ID: id}
wpool.Commit(&np)
}
wpool.Release()
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )