Forum Pplware

Versão Completa: Diferença entre o conceito de Task e Thread (ambiente Windows)
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Boas Tardes!!!

Alguem me consegue explicar de forma sucinta, a diferença entre estes dois conceitos, no mundo do Windows??? é que so encontro info. "linux-based" , e tenho uma noçao ... que existe diferenças inerentes ao tipo de SO ...

cumps,
Do meu entendimento Task é mais uma abstracção que algo concreto.
Tanto um processo como uma thread, executam tasks. Do ponto de vista de escalonamento muitas vezes é utilizado o termo task pois a teoria tanto se aplica a processos como a threads.

Quanto a threads vs process, ai já existem diferenças.
Dentro de cada processo executa-se pelo menos uma thread, mas caso queiras podes executar mais do que uma.

A vantagem das threads é que estas se executam dentro de um processo logo o espaço de memoria é partilhado sendo fácil a comunicação entre elas.

Já os processos cada um tem um contexto a parte, e não podes aceder de forma directa ao espaço de endereçamento de outros processos caso contrario tens um segmentation fault ou algo equivalente, dependendo da linguagem em que estejas a programar.

Desta forma para comunicares entre processos ou utilizas primitivas do sistema operativo tipo sockets, e afins, ou então pedes ao sistema memoria partilhada o que já se torna mais complicado de gerir(hoje em dia penso que já não seja muito utilizado).

No que toca a performance, os processos competem entre si pelo processador, e depois dentro de cada processo as threads competem entre elas pela sua execução. Ou seja, os processos pode-se dizer que tomam maior prioridade do que as threads, no entanto se precisares de fazer muita comunicação entre as 'tasks' (leia-se processos/threads) o melhor provavelmente é usar threads.

Dado que as threads são executadas dentro de processos, nao podes ter threads a serem executadas em PC's diferentes e a comunicarem, no entanto podes ter processos em maquinas diferentes a comunicarem (basicamente todos os protocolos de rede o fazem).

Não sei se esclareci a tua duvida. Se falhei em alguma parte avisa que posso tentar ser mais especifico.

cumps!
(29-03-2011 22:12)Guilherme de Sousa Escreveu: [ -> ]Do meu entendimento Task é mais uma abstracção que algo concreto.
Tanto um processo como uma thread, executam tasks. Do ponto de vista de escalonamento muitas vezes é utilizado o termo task pois a teoria tanto se aplica a processos como a threads.

Quanto a threads vs process, ai já existem diferenças.
Dentro de cada processo executa-se pelo menos uma thread, mas caso queiras podes executar mais do que uma.

A vantagem das threads é que estas se executam dentro de um processo logo o espaço de memoria é partilhado sendo fácil a comunicação entre elas.

Já os processos cada um tem um contexto a parte, e não podes aceder de forma directa ao espaço de endereçamento de outros processos caso contrario tens um segmentation fault ou algo equivalente, dependendo da linguagem em que estejas a programar.

Desta forma para comunicares entre processos ou utilizas primitivas do sistema operativo tipo sockets, e afins, ou então pedes ao sistema memoria partilhada o que já se torna mais complicado de gerir(hoje em dia penso que já não seja muito utilizado).

No que toca a performance, os processos competem entre si pelo processador, e depois dentro de cada processo as threads competem entre elas pela sua execução. Ou seja, os processos pode-se dizer que tomam maior prioridade do que as threads, no entanto se precisares de fazer muita comunicação entre as 'tasks' (leia-se processos/threads) o melhor provavelmente é usar threads.

Dado que as threads são executadas dentro de processos, nao podes ter threads a serem executadas em PC's diferentes e a comunicarem, no entanto podes ter processos em maquinas diferentes a comunicarem (basicamente todos os protocolos de rede o fazem).

Não sei se esclareci a tua duvida. Se falhei em alguma parte avisa que posso tentar ser mais especifico.

cumps!

acho que é esta parte que tem mais importancia para o que eu quero !!
pttanto .. nesse caso, a memoria usada, é a cache do CPU ... e daí o acesso ser + rapido, é isso? Smile
A memoria estar na cache do CPU ou não, não tem a ver com isto.
O que faz com que sejam mais rápidos os acessos à memoria tem a ver com os mecanismos de comunicação.

Cada processo tem um espaço de endereçamento atribuído pelo SO. Dado que as threads estão a correr dentro do mesmo processo, todas elas podem aceder a esse espaço de endereçamento livremente. Já se estivermos a falar de vários processos, cada um tem o seu espaço de endereçamento, e para comunicarem entre si têm que o fazer por um género de mensagens, em que o intermediário é o SO. No sistema operativo pode-se dizer que tens dois modos; um modo sistema, e um modo utilizador. Quando o sistema operativo esta a fazer operações, há um bit do cpu que muda para "modo sistema" e desta forma o SO tem acesso a toda e qualquer posição de memoria.. quando esta em modo utilizador, os processos só podem aceder à sua zona de endereçamento.

Esta explicação toda para que? Quando queres comunicar entre dois processos, ao utilizares o SO como intermediário, ficas a comutar entre modo sistema e modo utilizador por cada mensagem enviada, e isso consome tempo e obriga a uma serie de operações (todas elas feitas automaticamente pelo SO atenção.. não és tu como programador que tens que as tratar). Se tiveres a utilizar threads, já não há esta necessidade pois encontram-se todas elas no mesmo espaço de endereçamento (do processo a que pertencem).

Por exemplo, na hipótese de teres duas threads em que cada uma esta a fazer uma determinada operação, podes passar a cada uma delas uma variável. Com base nesta variável podes trocar informação de forma a que elas comuniquem (ou então utilizas uma variável global, mas isso já não é muito 'clean').


cumps!
URL's de Referência