package pool import ( "context" "git.ouxuan.net/3136352472/go-service-template/jsruntime" pool "github.com/jolestar/go-commons-pool" "log" ) type JsRuntimePool struct { ctx context.Context jsRuntimePool *pool.ObjectPool } func NewJsRuntimePool(mainFile, useFileName string, relys jsruntime.Relys, mode jsruntime.RunMode) (jrp *JsRuntimePool) { jrp = &JsRuntimePool{} factory := pool.NewPooledObjectFactorySimple( func(context.Context) (interface{}, error) { render, err := jsruntime.NewJsRuntime(mainFile, useFileName, relys, mode) return render, err }) jrp.ctx = context.Background() jrp.jsRuntimePool = pool.NewObjectPoolWithDefaultConfig(jrp.ctx, factory) jrp.jsRuntimePool.Config.LIFO = false jrp.jsRuntimePool.Config.MaxIdle = 1000 jrp.jsRuntimePool.Config.MinIdle = 5 jrp.jsRuntimePool.Config.MaxTotal = 3000 jrp.jsRuntimePool.Config.BlockWhenExhausted = true jrp.jsRuntimePool.PreparePool(jrp.ctx) return } func (jrp *JsRuntimePool) JsRuntimeCall(call func(jr *jsruntime.JsRuntime)) (err error) { obj, err := jrp.jsRuntimePool.BorrowObject(jrp.ctx) if err != nil { return } o := obj.(*jsruntime.JsRuntime) call(o) err = jrp.jsRuntimePool.ReturnObject(jrp.ctx, obj) return } func (jrp *JsRuntimePool) Log() { idle := jrp.jsRuntimePool.GetNumIdle() active := jrp.jsRuntimePool.GetNumActive() all := idle + active log.Println("所有:", all, "空闲:", idle, "活动:", active) }