예제 #1
0
파일: godu.go 프로젝트: newblue/dispatch
func NewWalker() *Walker {
	var w = new(Walker)
	w.gq = dispatch.New(20)
	w.lock = new(sync.Mutex)
	w.wg = new(sync.WaitGroup)
	w.done = make(chan bool)
	w.paths = make([]string, 0, 1)
	w.sizes = make([]int64, 0, 1)
	return w
}
예제 #2
0
파일: daisy.go 프로젝트: bmatsuo/dispatch
// Run n daisy-chained k-task workflows simultaneously
func Example(n, k int) [][]int {
	numChan := n*opt.maxgo + 1 // > (# chains)*(# threads) [indep. of chain length]
	d := dispatch.New(opt.maxgo)
	cb := NewChannelBucket(numChan)
	wg := new(sync.WaitGroup)
	out := make([][]int, n)

	t1 := time.Nanoseconds()
	go d.Start()
	wg.Add(n)
	for id := 0; id < n; id++ {
		go ExampleDaisyChain(k, id, out, d, cb, wg)
	}
	wg.Wait()
	d.Stop()
	t2 := time.Nanoseconds()

	deltat := t2 - t1
	sec := deltat / 1e9
	frac := (deltat % 1e9) / 1e6

	fmt.Printf("Number of jobs %d; Maximum queue length %d; %d.%-3ds", n*k, d.MaxLen(), sec, frac)
	return out
}
예제 #3
0
파일: gotri.go 프로젝트: newblue/dispatch
 */
import (
	"flag"
	"fmt"
	"github.com/bmatsuo/dispatch"
	"github.com/bmatsuo/dispatch/queues"
	"log"
	"os"
	"rand"
	"sync"
	"time"
)

var (
	maxswimmers   = 10
	fifoDispatch  = dispatch.New(maxswimmers)
	swimDispatch  = dispatch.NewCustom(maxswimmers, queues.NewPriorityQueue())
	vecDispatch   = dispatch.NewCustom(maxswimmers, queues.NewVectorPriorityQueue())
	arrayDispatch = dispatch.NewCustom(maxswimmers, queues.NewArrayPriorityQueue())
	finishLine    = new(sync.WaitGroup)
)

type Athlete struct {
	Btime, Stime, Rtime int64
}

func RandomAthlete() Athlete {
	var (
		Btime = rand.Int63n(int64(opt.maxbtime) * 1e9)
		Stime = rand.Int63n(int64(opt.maxstime) * 1e9)
		Rtime = rand.Int63n(int64(opt.maxrtime) * 1e9)