Por que os threads são chamados de threads?

9

Entendo que um processo é uma unidade de propriedade de recursos e instruções executáveis. Os encadeamentos permitem que um processo compartilhe seus recursos com várias execuções, e é mais fácil para um SO agendar encadeamentos devido a toda a sobrecarga associada a processos inteiros.

Mas por que o segmento de nome ? Ele tem alguma referência a string ou a intercalação de execução? Mesmo assim, este não é um termo intuitivo na minha opinião.

Matt
fonte

Respostas:

11

Você já procurou em um dicionário? A palavra segmento tem um significado após a costura.

3: algo contínuo ou prolongado: como

a: uma linha de raciocínio ou linha de pensamento que conecta as partes em uma sequência (como de idéias ou eventos)

http://www.merriam-webster.com/dictionary/thread

GrandmasterB
fonte
Interessante. Eu havia pesquisado "definir fio", mas essa definição não era uma delas. Estou feliz que você mencionou isso, porque é abstrato o suficiente para atravessar a ponte do uso geral para a programação.
Matt
9

Já viu como múltiplos fios, torcidos, formam um cordão mais grosso e forte?

Essa é a metáfora: todos os threads são independentes, mas todos os threads juntos colaboram para uma saída computacional final. Além disso, como no fio têxtil, um fio pode quebrar sem comprometer a estrutura de todo o cordão.

insira a descrição da imagem aqui

Tulains Córdova
fonte
2
enquanto eu sempre imaginava "fios", apenas você e GrandmasterB os descreviam, sem ter certeza de todo o "cordão torcido, mais grosso e mais forte". Em vez disso, a maioria dos threads em um sistema operacional se parece com isso: miqel.com/bonnaroo_2008_music/yarn_string_trips.jpg (o cara à direita seria o controlador de memória) Sim, algumas vezes algumas dessas strings destinam-se a resolver um problema comum, mas a maioria é apenas lá e OS apenas permite que todos eles fazem o que querem (dentro da razão)
DXM
7

tl; dr: Eles são chamados de threads porque "thread" é ​​uma metáfora adequada.


Ao iniciar um encadeamento, você depende do sistema operacional para alocar o tempo de processamento para que seu encadeamento possa ser executado. Enquanto o encadeamento estiver em execução, o processador (ou núcleo) está colocando toda a atenção no encadeamento. Quando o sistema operacional alterna o núcleo para um thread diferente, o thread pára de executar enquanto o outro thread está sendo atendido.

Então a execução salta por todo o lado. Mas a integridade do conjunto de instruções da máquina permanece intacta, apesar desses saltos, porque construímos cercas e mecanismos de concorrência para proteger seu estado e o estado dos objetos com os quais ele interage.

Portanto, o encadeamento se refere, não à execução de instruções em qualquer encadeamento específico, mas às instruções que eventualmente serão executadas no encadeamento que criamos. Cada encadeamento, em outras palavras, pode ser pensado como uma máquina ou agente individual (os chamamos de processos leves), sem ter que pensar em todas as alternâncias de contexto que o sistema operacional está executando para dar a aparência de que são todas. executando simultaneamente.

Em outras palavras, apesar de todo o salto que o SO faz nos bastidores, o que chamamos de thread (a sequência de operações que estamos executando em um processo leve) ainda pode ser pensado como a mesma sequência de operações, se não tivéssemos gerado o encadeamento, assumindo que tomamos as proteções de concorrência necessárias.


Se essa descrição parecer muito pesada e abstrata, pense em um tópico em um fórum, como o Reddit. Você pode ramificar novas discussões; cada discussão é seu próprio tópico. Você pode pular para frente e para trás entre os threads. Mas cada segmento ainda mantém sua integridade estrutural como uma conversa individual.

Robert Harvey
fonte
4

É difícil desvendar (trocadilho totalmente intencional) a fonte do termo "Fio", porque várias coisas lamam as águas.

O uso do encadeamento no fórum ou no senso de e-mail quase certamente decorre da frase "encadeamento de conversação", que, de acordo com isso, remonta a 1593.

As coisas parecem menos claras para o significado do encadeamento que você está perguntando, pois, de acordo com este link, os encadeamentos como os conhecemos não foram chamados de "encadeamentos" até os anos 70 ou possivelmente no início dos anos 80, apesar da implementação de um processo de memória compartilhada. na verdade, anteceder o que consideramos processos pesados ​​hoje em dia. Dado que uma forma relacionada de multiprocessamento de memória compartilhada é chamada de "fibra", suspeito fortemente que a palavra "fio" seja uma reminiscência de tecido de tecelagem ou alguma outra analogia relacionada a têxteis.

Evicatos
fonte
3

Eu acho que tem a ver com um 'fio de raciocínio' ou 'fio de pensamento'.

Ao contrário de um processo, os threads compartilham memória. Portanto, se um processo é comparado com uma pessoa com sua própria mente (memória), um fio pode ser comparado com uma linha de pensamento dentro dessa mente.

Alexander Torstling
fonte
1

Eu li em algum lugar a analogia das linhas na programação. Pense na CPU como uma agulha de costura e na linha como a string real. Agora, se você tiver várias agulhas de costura, mas apenas uma linha. Você não acha que será bastante ineficiente? A outra CPU / agulha de costura estará aguardando a linha estar disponível. No entanto, se tivermos vários encadeamentos, o trabalho poderá ser realizado em pouco tempo.

hábil
fonte
11
O que há de errado com isso? Por que -1?
hábil