mirror of
https://github.com/safing/portmaster
synced 2025-09-02 02:29:12 +00:00
51 lines
782 B
Go
51 lines
782 B
Go
package unit
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func BenchmarkScheduler(b *testing.B) {
|
|
workers := 10
|
|
|
|
// Create and start scheduler.
|
|
s := NewScheduler(&SchedulerConfig{})
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
go func() {
|
|
err := s.SlotScheduler(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
defer cancel()
|
|
|
|
// Init control structures.
|
|
done := make(chan struct{})
|
|
finishedCh := make(chan struct{})
|
|
|
|
// Start workers.
|
|
for i := 0; i < workers; i++ {
|
|
go func() {
|
|
for {
|
|
u := s.NewUnit()
|
|
u.WaitForSlot()
|
|
u.Finish()
|
|
select {
|
|
case finishedCh <- struct{}{}:
|
|
case <-done:
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
// Start benchmark.
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
<-finishedCh
|
|
}
|
|
b.StopTimer()
|
|
|
|
// Cleanup.
|
|
close(done)
|
|
}
|