Driver v/s Monitor

Why do we have non-blocking assignments in driver and blocking assignments in monitor ?

In reply to nishitk:

The golden rule for non blocking assignments is that you use them when one process reads and another process synchronized to the same clock edge writes to the same signal.

Drivers and monitors both perform translation of abstractions. The testbench is usually untimed whereas the DUT is timed by synchronous clock cycles. Whenever you make assignments to signals that are synchronous to a clock in your driver, you use non-blocking assignments to avoid race conditions. There are other ways to avoid these race conditions, but non-blocking assignments are the most efficient way of doing that.

The monitor is taking signals in your DUT and converting them to transactions that usually go through TLM ports, or FIFOs that are used for synchronization, not clocks.