For the simplex algorithms, warmstarting a solver typically means installing a near-optimal basis and using that as a starting point instead of doing a crash or slack basis as a first step. This works best if the starting basis is already primal feasible (for the primal simplex algorithm) or dual feasible (for the dual simplex) because that eliminates the need for a phase 1. In the special case of installing an optimal basis the algorithm should normally only need a single iteration to verify its optimality.
Simplex warmstarting is crucial to the performance of MILP solvers since the MILP solver does various modifications to a base problem to solve subproblems. Using warmstart speeds up solving these subproblems a lot, most common case is solving a node in the branch-and-bound tree. Tightening the bound of a basic variable means that the basis of the parent node stays dual feasible and hence typically only a few iterations are needed to solve the new node. For use cases where one wants to change the objective (e.g. feasibility pump) one can use the primal simplex with warmstart to improve performance.
Note that inside a solver and potentially in a solver API it is also possible to use what I would call hotstart. Instead of just using the basis, the simplex algorithm can also store additional information such as a factorization of this basis and steepest edge weights for pricing. This can further improve the performance when solving only slightly changed subproblems.
For MILP solvers, the warmstart input is typically a primal solution (potentially only a partial solution) that preferably is already primal feasible. Hence its objective will give a primal (upper bound in case of minimization) on the objective value and thus can be used to prune nodes.
The effectivness of "warmstarting" MILP solvers depends on a lot of factors, sometimes it is crucial, sometimes completely useless. I prefer to calling it providing an input solution or a bound, since its not the same level of effort saving as the warmstarting of a simplex algorithm. The exact way this is done depends on the solver details but you can envision it as being equivalent to the solver finding a solution really early (even before presolve) and installing it from then on as the current incumbent until a better solution is found.
When is a MILP solution worth it? An obvious factor is how good the solution provided is. Then it also matters whether it is hard to find any solutions. As a rule of thump I would say that for instances where it is hard to find any solutions or where the solutions found early by the solver are of bad quality, it makes sense to put some thought into providing a good quality input solution. For other cases, if one happens to have a solution anyways, it normally can't hurt to provide that solution to the solver.