1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiawucha365-sgpool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

Пул корутин.

Архитектура

Предоставляются два вида пулов корутин: многоразовые/динамические с созданием и уничтожением, в режиме отладки можно собирать статистику по тайм-аутам и сбоям задач.

Установка

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Пул корутин, предоставляющий две разновидности пулов корутин: многоразовые/динамически создаваемые и уничтожаемые. В режиме отладки можно вести статистику по тайм-аутам и сбоям задач. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xiawucha365-sgpool.git
git@api.gitlife.ru:oschina-mirror/xiawucha365-sgpool.git
oschina-mirror
xiawucha365-sgpool
xiawucha365-sgpool
master