Arquitetura de von Neumann
A Arquitetura de von Neumann é uma arquitetura de computador que se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória que os dados, podendo assim manipular tais programas. Esta arquitetura é um projeto modelo de um computador digital de programa armazenado que utiliza uma unidade de processamento (CPU) e uma de armazenamento ("memória") para comportar, respectivamente, instruções e dados.
As primeiras máquinas de computação tinham programas fixos. Alguns computadores muito simples ainda usam este projeto, quer para fins de simplicidade ou de formação. Por exemplo, uma calculadora de mesa (em princípio) é um programa de computador fixo. Ele pode fazer a matemática básica, mas não pode ser usado como um processador de texto ou um emulador de console de videogame. Alterar o programa de uma máquina de programa fixo exige religação, reestruturação ou reprojetar a máquina. Os primeiros computadores não eram tão "programados", como eles foram "desenhados". Era um processo trabalhoso, começando com fluxogramas e cédulas de papel, seguido de desenhos detalhados de engenharia e, em seguida o processo muitas vezes penoso fisicamente de religação e reconstrução da máquina. Podendo levar três semanas para criar um programa no ENIAC e começar a trabalhar. A ideia do computador de programa armazenado, mudou tudo isso: um computador que pelo projeto inclui um conjunto de instruções e pode armazenar na memória um conjunto de instruções (programa) que detalha o cálculo. Um projeto de programa armazenado também permite que os programas possam se modificar durante a execução. Uma motivação precoce para uma instalação desse tipo foi a necessidade de um programa para incrementar ou modificar a porção do endereço das instruções, o que tinha que ser feito manualmente em projetos adiantados. Isto tornou-se menos importante quando registradores de índice e endereçamento indireto foram as características usuais da arquitetura da máquina. Código de Automodificação foi amplamente caído em desuso, já que normalmente é difícil de entender e depurar, bem como sendo ineficiente em pipelining processador moderno, e esquemas de cache.
O canal de transmissão de dados entre a CPU e a memória leva ao gargalo de von Neumann, a troca de dados limitada (taxa de transferência) entre a CPU e a memória em relação à quantidade de memória. Na maioria dos computadores modernos, a troca de dados entre o processador e a memória é muito menor do que a taxa com que o processador pode trabalhar. Isso limita seriamente a velocidade eficaz de processamento, principalmente quando o processador é exigido para realizar o processamento de grandes quantidades de dados. A CPU é constantemente forçada a esperar por dados que precisam ser transferidos para, ou a partir da, memória. Como a velocidade da CPU e o tamanho da memória têm aumentado muito mais rapidamente que a taxa de transferência entre eles, o gargalo se tornou mais um problema, um problema cuja gravidade aumenta com cada geração de CPU. O termo "gargalo de von Neumann" foi cunhado por John Backus em sua palestra Award 1977 ACM Turing. Segundo Backus:
A Primeira Ideia (primeiro rascunho - First Draft) descrevia um design de computador que foi usado por muitas universidades e corporações para construir seus computadores. Dentre esses computadores, somente o ILLIAC e o ORDVAC possuíam instruções compatíveis.


