use buffered channel