Different pRNG algorithms have different trade-offs between performance, quality, and security. Typical programs (such as ones that use a standard library random method) use low quality pRNGs because they need something that's quick and appears random on first approximation, but in fact are not random and have varying degrees of quality.
A fast pRNG might produce a sequence that looks like this:
While a somewhat higher quality pRNG might look like this: