rename stack to list, add pool collect func