refactor pool mgr to use goroutines