actor: refactor and add benchmark