use promise/future pattern
reduce memory pressure