Hoje em dia, o JavaScript é o principal player em todas as tecnologias de desenvolvimento da web, no lado do cliente, para melhorar a interface do usuário, a lógica do lado do cliente, em alguns servidores da web, como a lógica do lado do servidor também
Acrescente a isso o fato de as pessoas (pelo menos algumas delas) começarem a se mover no desenvolvimento de jogos na web, de flash para javascript e HTML5
Não é hora de oferecer suporte a multi threading! existem navegadores que permitem que o JavaScript seja multiencadeado ou existe em algum padrão, HTML5 ou versões futuras ?!
Respostas:
O multiencadeamento não será realizado no EcmaScript, mas poderá ser exposto em ambientes host.
Os exemplos clássicos são WebWorkers, que permitem que você crie um trabalhador em segundo plano para realizar trabalhos e abusar deles
<iframe>
como uma maneira de gerar novos processos.Deve-se notar que a multiencadeamento em JavaScript não é necessária (há exceções, principalmente programas relacionados a gráficos). Você não precisa de vários threads, já possui um loop de eventos para sua GUI e a renderização gráfica (canvas) é acelerada por hardware (ou seja, a GPU renderiza seus gráficos em paralelo para você).
Embora projetos como o webcl sejam bastante empolgantes.
fonte
NÃO
O multi threading é uma das coisas mais difíceis do software para acertar. Existem muitos casos extremos que são realmente difíceis de resolver quando o seu código não é determinístico. (Eu estou falando sobre multi threading com bloqueios etc). Além disso, todas as várias bibliotecas JavaScript são criadas com base no pressuposto de que não são multiencadeadas.
Dito isto, existem trabalhadores da Web que fornecem uma estrutura baseada em ator para realizar operações de tipo de processamento múltiplo. Você pode criar trabalhadores e repassar dados através de eventos.
EDIT: O outro motivo é que, quando o JavaScript foi criado, era feito com a suposição de que ele seria usado para pequenas tarefas; portanto, nenhuma simultaneidade foi incorporada. Para a atualização, agora ele quebraria muito código. Ao adicionar trabalhadores da Web, foi possível ter um sistema onde houvesse simultaneidade sem memória compartilhada, mas usando atores, um modelo de simultaneidade que se mostrou muito robusto em vários outros idiomas como Erlang, Scala, Clojure etc.
(SE você não pode dizer que eu realmente não gosto de simultaneidade baseada em bloqueio)
fonte
Multi threading is one of the hardest things in software to get right.
- Eu apenas surpreendi com isso! O navegador que você está usando, o SO da área de trabalho, o servidor da web que serve esta página - praticamente todos os aplicativos que você usa todos os dias são multithread. Tem certeza de que quer dizer isso? Ainda para diminuir seu voto, mas eu o farei se você disser #multithreading is not done because it is hard
abrir o javascript para multithreading criará mais problemas do que resolve:
a arquitetura atual é baseada em eventos de thread único (sendo executada no thread da GUI com mais frequência) em outras palavras, com cada bloco de código, você pode ter certeza de que nada no ambiente será alterado do início ao fim, exceto o que foi alterado no código
assim que você permitir a preempção ou a execução paralela, esse recurso será desativado, isso significa que você precisa aplicar bloqueios aos dados que deseja alterar, além de ter condições de corrida difíceis de depurar para evitar
é possível ter execução pseudo-paralela usando timeouts, isso significa dividir funções de execução grandes ou longas em partes atômicas e usar
setTimeout(function(){nextstep(args);},1);
para que outras coisas possam ser executadas, se necessáriofonte
A Intel lançou o River Trail há algum tempo, o que permite a programação paralela em Javascript. No entanto, é um plug-in somente do Firefox e não ouvi falar de um roteiro que traga essa tecnologia para o W3C, muito menos para o ECMA.
fonte