Explain the difference between multi-threading and multi-processing, and when you would use each in Python or C++.