Diferença entre thread do sistema operacional e threads Java
Um thread na programação de computadores é uma breve sequência de instruções que devem ser agendadas e executadas pela CPU independentemente do processo pai. Vários threads podem estar ativos ao mesmo tempo em um programa, que os fecha ou suspende quando a tarefa é concluída ou o aplicativo é fechado. Uma CPU multithreading tem a capacidade de executar vários threads simultaneamente. A seguir estão as diferenças entre threads de sistema operacional e threads java.
Tópicos em Java
Em Java, um thread é o curso ou caminho seguido enquanto um programa está sendo executado. Todos os programas normalmente possuem pelo menos um thread principal, que é fornecido pela JVM ou Java Virtual Machine no início da execução do programa. O método main() agora é chamado pelo thread principal quando ele recebe o controle do thread principal.
O thread de execução de um programa é conhecido como thread. Um programa executado na Java Virtual Machine pode executar vários threads ao mesmo tempo. Cada thread tem uma prioridade diferente. A ordem de prioridade determina quais threads são executados primeiro.
Por permitir a execução de diversas ações dentro de uma única função, o thread é essencial ao programa. O contador do programa, a pilha e as variáveis locais são frequentemente exclusivos para cada thread.
Java oferece duas técnicas diferentes para construir um thread -
-
Estendendo java.lang.class de threads.
Implementação de interface executável.
Estendendo Java.lang.class
Esta nova classe estende a classe Thread, uma instância dessa classe é gerada e isso resulta na criação de um thread. A funcionalidade que deve ser realizada pelo Thread está incluída no método run(). Um thread torna-se executável usando start() depois de criado. No procedimento void run(), um novo thread é iniciado.
Implementando Interface Executável
Esta é a maneira mais simples de criar um tópico. Neste caso, uma classe é desenvolvida para implementar a interface executável e o método run(). Sempre o código de execução do thread é escrito dentro do método run().
O método void run() é invocado pelo método start(). Uma nova pilha é fornecida ao thread quando start() é chamado e run() é então chamado para introduzir o thread no programa.
O que são threads do sistema operacional?
Um thread é um caminho de execução exclusivo. Por ser um processo pequeno, o sistema operacional pode programá-lo para operar junto com outras threads. Threads são produzidos e gerenciados pelo sistema operacional, compartilhando memória e recursos com os programas que os criaram. Isso possibilita que vários threads cooperem e operem de maneira eficaz em um único aplicativo.
Dentro de um processo, um thread é um fluxo de sequência única. Por compartilharem algumas características com os processos, os threads são frequentemente conhecidos como processos leves. Cada thread faz parte de apenas um processo. O processo pode ter vários threads em um sistema operacional que suporta multithreading.
Tipos de thread
Um contador de programa distinto, uma pilha de registros de ativação e um conjunto de blocos de controle são usados por cada thread do mesmo processo. O desempenho dos programas é melhorado com threads.
Existem dois tipos de thread diferentes em um thread de nível de kernel do sistema operacional e um thread de nível de usuário.
Threads em nível de kernel
O sistema operacional implementa e controla threads no nível do kernel.
-
Threads de nível de kernel são implementados usando chamadas de sistema e o sistema operacional está ciente delas.
Threads em nível de usuário podem ser criados e gerenciados mais rapidamente do que threads em nível de kernel.
Um thread no nível do kernel tem uma alternância de contexto mais lenta.
Não há impacto em outros threads se um thread no nível do kernel executa uma ação de bloqueio ou não. Pense na janela Solaris.
O kernel não tem conhecimento dos threads no nível do usuário porque eles são implementados e controlados pelo usuário.
Threads em nível de usuário
Threads de nível de usuário são criados usando bibliotecas de nível de usuário e o sistema operacional não tem conhecimento deles.
Comparados aos threads de nível de kernel, os threads de nível de usuário são mais fáceis de estabelecer e manter.
É mais rápido alternar contextos em threads de nível de usuário.
Todo o processo fica paralisado se apenas um thread de nível de usuário executar uma tarefa de bloqueio. Considere threads Java, threads POSIX, etc.
Diferença entre Java Thread e OS Thread
A tabela a seguir destaca como os threads Java são diferentes dos threads do sistema operacional -
In the context of Java, a thread is the path taken during program execution
-
A menor unidade de processamento que um sistema operacional é capaz de manipular é um thread</p>
At least one thread, referred to as the main thread, is present in Java programs
Um processo pode ter vários threads</p>
In Java, user threads and daemon threads are two distinct types of threads
Existem dois tipos diferentes de threads de sistema operacional - threads em nível de usuário e threads em nível de kernel</p>
When the main () method is called with the main thread at the beginning of the program, it is controlled by the Java Virtual Machine (JVM)
O sistema operacional supervisiona o gerenciamento</p>
Thread communication is facilitated by the methods wait (), notify (), and notifyAll ()
Threads podem se comunicar mais facilmente e trocar informações comuns</p>
Monitors are used to implement thread synchronization, and synchronized blocks are used for blocking
Utilizar mutexes é o método mais comum para obter sincronização de threads</p>
Which thread should run is decided by the thread scheduler in the Java Virtual Machine (JVM). Pre-emptive scheduling and time slicing are the two types
O desenvolvedor do aplicativo agendando threads de nível de usuário (ULT) para threads de nível de kernel (KLT) por meio do Light-Weight Process (LWP).</p>
O agendador do sistema agendando threads no nível do kernel para executar várias funções distintas do sistema operacional.</p>
Conclusão
Qualquer thread em execução em um processo JVM é chamado de "thread Java". Apesar de terem vários IDs de thread, os threads do sistema operacional são todos threads que fazem parte de um processo e compartilham o mesmo ID de processo e ID de processo pai.