나는 Go에서 간단한 이벤트 루프 래퍼를 만들려고 노력해 왔습니다. 하지만 난 어려워졌습니다. 어떻게 현재 스레드에서 작업을 추적해야합니까? CurrentTick이 함수를 실행하기를 원했고 호출 함수가 종료 되더라도 CurrentTick에서 실행되는 모든 함수가 종료 될 때까지 다음 틱을 시작하지 마십시오. 스레드 수를 모니터하기 위해 뮤텍스를 사용할 수 있다고 생각했지만, CPU를 스로틀 링한다는 것을 계속 확인하면 깨달았습니다. 내가 시간을 사용했다면 잠잠해질 것입니다. 어떻게 문제를 해결하겠습니까?이동 중에 대기 시간이 짧은 스레드를 기다리는 방법은 무엇입니까?
package eventloop
import (
"reflect"
)
type eventLoop *struct{
functions []reflect.Value
addFunc chan<-/*3*/ reflect.Value
mutex chan/*1*/ bool
threads int
}
func NewEventLoop() eventLoop {
var funcs chan reflect.Value
loop := eventLoop{
[]Reflect.Value{},
funcs = make(chan reflect.Value, 3),
make(chan bool, 1),
0,
}
go func(){
for {
this.mutex <- 1
if threads == 0 {
}
}
}
}
func (this eventLoop) NextTick(f func()) {
this.addFunc <- reflect.ValueOf(f)
}
func (this eventLoop) CurrentTick(f func()) {
this.mutex <- 1
threads += 1
<-this.mutex
go func() {
f()
this.mutex <- 1
threads -= 1
<-this.mutex
}()
}
나는 이것이 내 자신을 알아 냈다고 생각하지만, 그것을 테스트 할 것이고, 그것이 아픈 경우에는 대답으로 먼저 확인해 볼 것입니다. –