There is very little difference between non-blocking and blocking in speed and no errors if done correctly either way.
Blocking and Non-Blocking are procedural assignments, Where Blocking performs sequential execution and Non- blocking executes the statements in parallel.
If a variable is given value by a blocking assignment statement then this new value is used in evaluating all subsequent statements in block.
Synthesized blocking statements:
always@ (posedge clk)
begin
Q1 = D;
Q2 = Q1;
end