Clarification on virtual sequence and virtual sequencer in OVM or UVM

I am trying to create a virtual sequence to control stimulus generation at SOC level using the low level sequences.
The cook book explains two approaches

  1. using virtual sequences that gets handles to all sequencers and start the sequence on any of them
  2. use the virtual sequence and start it on a virtual sequencer which will have handles to all of the low level sequencers.

What is the difference and how to implement 2)? There are examples on 1) in cookbook but for 2)- I dont find any

I preferred 2) because then the virtual sequence need not be tied to know all the env sequencers.

The second approach will make usability easy compared to first approach. There is one example in UVM Cookbook on the second approach usage under “Tesbench/Blocklevel” section. In that section search for the spi_virtual_sequencer, you will find the example.