Зависать программы могут по разным причинам: недостаточно оперативной памяти (обычно после нескольких минут виса программа закрывается), программа обращается к битому файлу, запущенно слишком много процессов и процессору не хватает мощности для уделения временивсем сразу...
Хоть соврешенные операционные системы и называют многозадачными, но на самом деле это не так. В один промежуток времени процессором обрабатывается только 1 процесс. После определенного промежутка времени, процессор переключается на другой процесс и т.д. Это происходит настолько быстро, что для нас создается иллюзия, будто все процессы работают одновременно. Какому процессу и сколько уделить времени определяется приоритетом в системе. Существуют много различных планировщиков задач, которые распределяют процессор на все задачи. Вообще это довольная обширный вопрос и ответить на него в полной мере в рамках этого ответа очень сложно...
Мне кажется, что полностью решить вопрос зависания не получится. Слишком много разных факторов, вызывающие разные проблемы, приводящие к зависанию... Однако же, прогресс не стоит на месте, и кто знает, может уже лет через 5 мы и забудем про все эти зависания и тормоза.