O que é um" fio " (realmente)?

Tenho tentado encontrar uma boa definição, e obter um entendimento, do que um fio realmente é.

Parece que me falta algo óbvio, mas sempre que leio sobre o que é um fio, é quase uma definição circular, um la "um fio é um fio de execução" ou "uma maneira de dividir em executar tarefas". Uh uh uh. Huh?

Pelo que li, parece que um fio não é realmente algo concreto, como um processo. De facto, é. É só um conceito. Pelo que eu entendo da forma como funciona isto, um processador executa alguns comandos para um programa (o que tem sido chamado de um thread de execução), então quando ele precisa mudar para processamento por algum outro programa, por um pouco, ele armazena o estado do programa atualmente em execução para algum lugar (Armazenamento Local de Thread) e, em seguida, começa a execução de outras instruções do programa. E para trás e para a frente. Tal que, um fio é realmente apenas um conceito para " um dos caminhos de execução " de um programa que está atualmente em execução.

Ao contrário de um processo, que realmente é algo - é um conglomerado de recursos, etc.

Como exemplo de uma definição que não me ajudou muito . . .

Da Wikipédia:

"Um fio na ciência da computação é diminutivo de um fio de execução. Threads são uma forma de um programa dividir (denominado "split") em duas ou mais tarefas em execução simultaneamente (ou pseudo-simultaneamente). Threads e processos diferentes a partir de um sistema operacional para outro, mas, em geral, um thread está contido dentro de um processo e de diferentes threads no mesmo processo compartilham os mesmos recursos, enquanto processos diferentes no mesmo sistema operacional de multitarefa não."

Então, tenho razão? Errado? O que é realmente um fio?

Edit: aparentemente um tópico também é dado a sua própria pilha de chamadas, de modo que é algo de concreto {[[2]} coisa .

Author: richard, 2011-03-05

12 answers

Um fio é um conjunto independente de valores para os registos do processador (para um único núcleo). Uma vez que isso inclui o ponteiro de instrução (também conhecido como contador de programa), ele controla o que executa em que ordem. Ele também inclui o ponteiro da pilha, que tinha melhor ponto para uma área única de memória para cada thread ou então eles vão interferir uns com os outros.

As Threads são a unidade de software afectada pelo fluxo de controlo( chamada de função, laço, Gótico), porque essas instruções operam na Ponteiro de instrução, e isso pertence a um fio em particular. Threads são muitas vezes agendados de acordo com algum esquema de priorização (embora seja possível projetar um sistema com um thread por núcleo do processador, caso em que cada thread está sempre em execução e nenhum agendamento é necessário).

De facto, o valor do ponteiro de instrução e da instrução armazenada nesse local é suficiente para determinar um novo valor para o ponteiro de instrução. Para a maioria das instruções, isto simplesmente avança o IP pelo tamanho da instrução, mas as instruções de fluxo de controle mudam o IP de outras formas previsíveis. A sequência de valores que o IP toma forma um caminho de execução tecelagem através do Código do programa, dando origem ao nome "thread".

 111
Author: Ben Voigt, 2011-03-05 05:32:52

Um thread é um contexto de execução, que é toda a informação que uma CPU precisa para executar um fluxo de instruções.

Suponha que está lendo um livro, e que quer fazer uma pausa agora, mas quer ser capaz de voltar e retomar a leitura do ponto exato onde parou. Uma maneira de conseguir isso é anotando o número da página, número da linha e número da palavra. Então o seu contexto de execução para ler um livro são estes três números.

Se tens um companheiro de quarto, e ela está a usar a mesma técnica, pode pegar no livro enquanto tu não o usas, e continuar a ler de onde ela parou. Depois podes levá-lo de volta, e retomá-lo de onde estavas.

Os fios funcionam da mesma maneira. Uma CPU está a dar-lhe a ilusão de que está a fazer vários cálculos ao mesmo tempo. Faz isso gastando um pouco de tempo em cada computação. Ele pode fazer isso porque tem um contexto de execução para cada computação. Tal como podes partilhar um livro com o teu amigo., muitas tarefas podem compartilhar uma CPU.

Em um nível mais técnico, um contexto de execução (portanto um thread) consiste dos valores dos registros da CPU.

Por último: os tópicos são diferentes dos processos. Um thread é um contexto de execução, enquanto um processo é um monte de recursos associados a uma computação. Um processo pode ter um ou muitos fios.

Esclarecimento: os recursos associados a um processo incluem páginas de memória (todos os tópicos de um processo têm a mesma visão de a memória), descritores de arquivos (por exemplo, sockets abertos), e credenciais de segurança (por exemplo, o ID do usuário que iniciou o processo).

 149
Author: pwnall, 2015-03-11 17:33:42
Os processos são como duas pessoas usando dois computadores diferentes, que usam a rede para compartilhar dados quando necessário. Threads são como duas pessoas usando o mesmo computador, que não têm que compartilhar dados explicitamente, mas devem cuidadosamente fazer turnos. Conceptualmente, os fios são apenas várias abelhas obreiras a zumbir no mesmo espaço de endereçamento. Cada thread tem sua própria pilha, seu próprio contador de programa, etc., mas todos os fios em um processo compartilham a mesma memória. Imagine dois programas em execução ao mesmo tempo, mas ambos podem acessar os mesmos objetos.

Contraste isto com processos. Processos cada um têm seu próprio espaço de endereço, o que significa que um ponteiro em um processo não pode ser usado para se referir a um objeto em outro (a menos que você use memória compartilhada).

Acho que as coisas-chave para entender são:

  • ambos os processos e threads podem "correr ao mesmo tempo".
  • os processos não partilham memória (por omissão), mas os tópicos partilham toda a sua memória com outros threads no mesmo processo.
  • cada tópico num processo tem a sua própria pilha e o seu próprio ponteiro de instruções.
 37
Author: Joey Adams, 2015-03-06 18:48:36
Para definir formalmente um fio, primeiro temos de compreender os limites de onde um fio opera.

Um programa de computador torna-se um processo Quando é carregado de alguma loja para a memória do computador e começa a execução. Um processo pode ser executado por um processador ou um conjunto de processadores. Uma descrição do processo na memória contém informações vitais, tais como o contador de programa que mantém o controle da posição atual no programa (ou seja, que instrução é atualmente em execução), registradores, lojas variáveis, pegas de arquivos, sinais, e assim por diante.

A thread é uma sequência de tais instruções dentro de um programa que pode ser executado independentemente de outro código. A figura mostra o conceito: enter image description here

Os tópicos estão dentro do mesmo espaço de endereçamento do processo, Portanto, grande parte da informação presente na descrição da memória do processo pode ser partilhada entre os tópicos.

Algumas informações não podem ser replicado, como a pilha (ponteiro da pilha para uma área de memória diferente por thread), registros e dados específicos do thread. Esta informação é suficiente para permitir que os tópicos sejam agendados de forma independente da principal thread do programa e possivelmente uma ou mais outras threads dentro do programa.

O suporte explícito do sistema operativo é necessário para executar programas multithreaded. Felizmente, a maioria dos sistemas operacionais modernos suportam threads como Linux (via NPTL), variantes BSD, Mac OS X, Windows, Solaris, AIX, HP-UX, etc. Os sistemas operacionais podem utilizar diferentes mecanismos para implementar suporte de multithreading.

Here, graphically, the concept is rapresented.

Aqui , Você pode encontrar mais informações sobre o tópico. Essa também era a minha fonte de informação.

 30
Author: Leos313, 2017-08-29 07:50:33
Vou usar muitos textos do livro conceitos de sistemas operacionais de ABRAHAM SILBERSCHATZ, PETER BAER GALVIN e GREG GAGNE, juntamente com a minha própria compreensão das coisas.

Processo

Qualquer aplicação reside no computador sob a forma de texto (ou código).

Enfatizamos que um programa por si só não é um processo. Um programa é um entidade passiva, como um arquivo contendo uma lista de instruções armazenadas no disco (muitas vezes chamado de ficheiro executável).
Quando iniciamos uma aplicação, criamos uma instância de execução. Este exemplo de execução é chamado de processo. EDIT: (de acordo com a minha interpretação, análogo a uma classe e uma instância de uma classe, A instância de uma classe sendo um processo. ) Um exemplo de processos é o Google Chrome. Quando iniciamos o Google Chrome, 3 processos são gerados:

• o processo browser é responsável pela gestão da interface de utilizador como bem como disco e rede I / O. Um novo processo de navegador é criado quando O cromado começou. Apenas um processo de navegador é criado.

Renderer os processos contêm lógica para renderizar páginas web. Assim, contain the logic for handling HTML, Javascript, images, and so forth. Como regra geral, um novo processo de renderizador é criado para cada site aberto numa página nova, pelo que vários processos de representação poderão estar activos ao mesmo tempo.

• a plug-in processo é criado para cada tipo de plug-in (Como Flash ou QuickTime) em uso. Processos Plug-in contêm o código para a plug-in, bem como código adicional que permite ao plug-in para comunicar com os processos de representação associados e o navegador processo.

Tópico

Para responder a isto, acho que devias saber primeiro o que é um processador. Um processador é a peça de hardware que realmente executa os cálculos. Editar: (cálculos como adicionar dois números, ordenando uma matriz, basicamente executando o código que foi escrito) Passando agora à definição de fio.

Uma thread é uma unidade básica de Utilização da CPU ; compreende uma thread ID, UM programa balcão, caixa registadora e uma pilha.

Editar: definição de um tópico do sítio Web da intel:

Um Thread, ou thread of execution, é um termo de software para a sequência ordenada básica de instruções que podem ser passadas. através ou processado por um único núcleo de CPU.

Assim, se o processo de representação da aplicação Chrome Ordenar um conjunto de números, a ordenação terá lugar num thread/thread de execução. (A gramática em relação aos tópicos me parece confusa)

A minha interpretação das coisas

Um processo é uma instância de execução. Threads são os trabalhadores reais que realizam os cálculos através de acesso CPU. Quando existem vários tópicos em execução para um processo, o processo fornece memória comum.

Editar: Outras informações que achei úteis para dar mais contexto

Todos os computadores modernos têm mais do que um tópico. O número de threads em um computador depende do número de núcleos em um computador.

Informática Concorrente:

Da Wikipédia:

A Computação concorrente é uma forma de computação na qual vários cálculos são executados durante períodos de tempo sobrepostos-simultaneamente-em vez de sequencialmente (um completando antes do próximo início). Esta é uma propriedade de um sistema-isto pode ser um programa individual, um computador, ou uma rede-e existe um ponto de execução separado ou "thread of control" para cada computação ("processo").

Então, eu poderia escrever um programa que calcula a soma de 4 números:
(1 + 3) + (4 + 5)

No programa para calcular esta soma (que será um processo em execução) eu posso bifurcar outro processo que pode ser executado em um thread diferente para calcular (4 + 5) e retornar o resultado para o processo original, enquanto o processo original calcula a soma de (1 + 3).

 22
Author: chatuur, 2017-04-25 08:56:43
Infelizmente, os tópicos existem. Um fio é algo tangível. Podes matar um, e os outros ainda estarão a fugir. Podes despejar novos fios.... embora cada thread não seja o próprio processo, eles estão executando separadamente dentro do processo. Em máquinas multi-core, 2 threads poderiam funcionar ao mesmo tempo.

Http://en.wikipedia.org/wiki/Simultaneous_multithreading

Http://www.intel.com/intelpress/samples/mcp_samplech01.pdf

 5
Author: Orbit, 2011-03-05 05:21:59

A resposta varia enormemente em diferentes sistemas e implementações, mas as partes mais importantes são:

  1. uma thread tem uma thread independente de execução (ou seja, você pode mudar de contexto para longe dela, e então de volta, e ele vai continuar funcionando onde estava).
  2. um fio tem uma vida (pode ser criado por outro fio, e outro fio pode esperar que ele termine).
  3. provavelmente tem menos bagagem ligada do que uma "processo".

Além disso: threads poderiam ser implementados dentro de um único processo por um tempo de execução de linguagem, threads poderiam ser coroutinas, threads poderiam ser implementados dentro de um único processo por uma biblioteca de threads, ou threads poderiam ser uma construção de kernel.

Em vários sistemas Unix modernos, incluindo o Linux com o qual estou mais familiarizado, tudo é threads -- um processo é meramente um Tipo de thread que partilha relativamente poucas coisas com o seu pai (ou seja, ele recebe seus próprios mapeamentos de memória, sua própria tabela de arquivos e permissões, etc.) Ler {[[[0]}, especialmente a lista de bandeiras, é realmente instrutivo aqui.

 4
Author: hobbs, 2011-03-05 05:27:53

Isto foi tirado de uma resposta de um Yahoo:

Um tópico é uma construção de codificação não afectado pela arquitectura de um aplicacao. Um único processo frequentemente pode conter múltiplos segmento. Threads também pode diretamente comunicar uns com os outros desde que compartilhe as mesmas variáveis.

Os processos são execução independente unidades com o seu próprio estado informacao. Eles também usam seus próprios espaços de endereçamento e só pode interagir com outros processos através mecanismos de comunicação interprocessados.

No entanto, para colocar em termos mais simples threads são como diferentes "tarefas". Então pense em quando você está fazendo algo, por exemplo, você está escrevendo uma fórmula em um papel. Isso pode ser considerado um fio. Então outro tópico é você escrevendo outra coisa em outro pedaço de papel. É aí que entra a multitarefas.

Diz-se que os processadores Intel têm "hyper-threading" (o AMD também tem) e é suposto ser capaz de executar múltiplos "threads" ou multitarefas muito melhor.

Não tenho a certeza sobre a logística de como um fio é tratado. Lembro-me de ouvir falar sobre o processador ir e vir entre eles, mas não tenho 100% de certeza sobre isso e espero que alguém possa responder a isso.

 3
Author: Flipper, 2011-03-05 05:25:14

Um tópico não é nada mais do que um contexto de memória (ou como Tanenbaum o coloca melhor, agrupamento de recursos) com regras de execução. É uma construção de software. O CPU não tem idéia do que é um thread (algumas exceções aqui, alguns processadores têm threads de hardware), ele apenas executa instruções.

O kernel introduz o conceito de thread e processo para gerir a ordem de memória e instruções de uma forma significativa.

 2
Author: Valentin Radu, 2016-04-13 20:31:49

Eu não estou realmente feliz com nenhuma dessas respostas, então eu vou adicionar minha própria aqui:) um thread é uma abstração de kernel para agendar o trabalho no processador, um thread é o que o kernel lhe dá para gerenciar o tempo do processador e compartilhar o trabalho com outros

 -1
Author: Ion Todirel, 2018-02-03 09:14:22
Deixe-me explicar a diferença entre processo e threads primeiro.

Um processo pode ter {1..N} Número de tópicos. Uma pequena explicação sobre memória virtual e processador virtual.

Memória Virtual

Usado como um espaço de troca para que um processo pense que está sentado na memória primária para execução.

Processador Virtual

O mesmo conceito que a memória virtual, excepto que isto é para o processador. Para um processo, vai parecer que é o único a coisa que está a usar o processador.

O OS terá o cuidado de alocar a memória virtual e o processador virtual para um processo e realizar a troca entre processos e fazer a execução.

Todos os tópicos dentro de um processo irão partilhar a mesma memória virtual. Mas, cada thread terá seu processador virtual individual atribuído a eles para que eles possam ser executados individualmente.

assim, salvar a memória, bem como utilizar a CPU para a sua potencial.

 -1
Author: Balaji Radhakrishnan, 2018-03-10 07:28:47

Se queres uma resposta em inglês, heres o que o meu professor me disse quando lhe perguntei:

"Sabes como quando se executa um programa java, ele executa o programa de cima para baixo? Bem, um fio é basicamente uma maneira de contornar isso. Como abrir duas caixas de texto ao mesmo tempo, ou ter um temporizador a funcionar ao mesmo tempo que um monte de outras coisas." Juro que foi quase exactamente o que ele disse.
 -3
Author: Rodolfo Beguiristain, 2016-12-10 19:23:03