What’s the difference between blocking and non-blocking assignments?

Blocking assignments/statements are used to create combinatorial logic which are written as “=” operator. Non-blocking assignments/statements are used to create sequential logic, which are written as “<=” operator. The registers/wire on the left side of blocking assignments are updated immediately while the registers/wire on the left side of non-blocking assignments are updated in the next clock cycle.