Threads
Thread é uma entidade contida em um processo. Todos os threads de um processo compartilham seu endereço de espaço virtual e os recursos dos sistemas. Cada thread mantém os seus gerenciadores de exceções, uma prioridade de agendamento, um armazenamento local de threads ,um identificador único e um conjunto de estruturas que serão utilizados para salvar o contexto do Thread até que ele seja agendado.
O contexto do Thread contem a Pilha do Kernel, um bloco do ambiente de Thread (TEB), a Pilha do Usuario e um conjunto de valores independentes para os registradores do processador armazenado no endereço do processo da thread.
Entre esses valores se encontram o Ponteiro de Instruções (Instruction Pointer, Program Counter), que controla o que é executado e a ordem de execução, e o Ponteiro de Empilhamento (Stack Pointer) que deve apontar para áreas únicas da memoria para cada thread, caso contrario os threads podem interferir uns com os outros.
Basicamente uma thread é um conjunto de valores do registrador.
O valor do Ponteiro de Instruções (IP) e a instrução contida naquele lugar é suficiente para determinar um novo valor para o IP. A maioria das instruções avançam o IP de acordo com o tamanho das instruções mas a instruções de controle de fluxo alteram o IP de forma previsível. A sequencia de valores do IP forma um caminho de execução que é "tecido" através do código do programa, por isso o nome Thread que significa "Fio".
Vantagens:
Com Threads você pode dividir as tarefas em um programa, com uma thread para gerenciar a interface gráfica do usuário e outra thread para fazer trabalhos internos da aplicação, dando prioridade a thread de interface do usuário a aplicação se manterá responsiva as interações do usuário e as operações da aplicações serão utilizadas de forma mais eficiente quando não houve interação com a aplicação.