support concurrency
use channel and routineCounter