Uma interrupção de hardware ocorre em um nível de hardware. Estes podem ser coisas como traps e interrupções, onde o próprio processador salva seu estado e espera por entrada ou executa algo que não era necessariamente parte do programa original (ou seja, se você dividir por zero, seu processador tem que fazer algo que era não pretende fazer durante a execução normal do programa).
Talvez mais importante, uma interrupção de hardware permite que um processador não perca tempo nos chamados loops de polling. Imagine se você tivesse que ver se o usuário estava pressionando uma tecla. Existem duas maneiras de fazer isso. A primeira é verificar com muita frequência e ver se a tecla está pressionada. Enquanto isso vai funcionar, é um desperdício, pois a grande maioria das vezes o cheque volta negativo. Interrupções permite que a tecla seja pressionada para alterar o estado do programa para que seja "notificado" quando uma tecla é pressionada. A segunda maneira é claramente mais eficiente em muitos casos.
Uma interrupção de software geralmente significa uma alternância de contexto e é feita pelo sistema operacional. Em alguns casos, isso significa nada mais do que a troca do sistema operacional que o programa está executando no momento (se o seu computador estiver executando 50 processos, a menos que você tenha 50 núcleos / encadeamentos, o fato de programas serem executados simultaneamente é uma ilusão) acima do exemplo com o teclado, onde ele está esperando que algum evento ocorra (veja mais sobre programação baseada em eventos aqui ( da Wikipedia))
É importante notar que, embora em muitos casos a programação baseada em interrupções seja uma boa idéia, em aplicações onde há muitos programas baseados em interrupções é uma boa idéia, se ocorrer com muita frequência, pode ser menos eficiente e talvez até mesmo travar o sistema.