Clone vs deepClone

In order to achieve parallel processing , i want to do a doThreadInvoke

ServiceThread threadHandle = Service.doThreadInvoke(ifc,service,IDataUtil.clone(input));

ServiceThread threadHandle = Service.doThreadInvoke(ifc,service,IDataUtil.deepClone(input));

When to use deepClone vs clone …any limitation on doc size ?

Any other way ?