Verilog has blocking and non-blocking statements. Blocking statements complete assignments immediately and block execution flow until finished. Non-blocking statements evaluate assignments immediately but postpone assignments until other evaluations are complete, allowing execution flow to continue without blocking. Examples show blocking statements updating values immediately while non-blocking statements use old values since assignments are postponed.