Pergunta

Eu escrevi um pequeno aplicativo python e aqui você pode ver como o Gerenciador de Tarefas parece durante um funcionamento normal.
(fonte: weinzierl.name )

Enquanto o aplicativo está perfeitamente multithreaded, sem surpresa ele usa apenas um núcleo da CPU. Independentemente do fato de que a maioria das modernas linguagens de script suportam multithreading, scripts de pode ser executado em um núcleo da CPU única .

Ruby, Python, Lua, PHP tudo só pode ser executado em um único núcleo. Mesmo Erlang, o que é dito ser especialmente bom para programação concorrente, é afetado.

Existe uma linguagem de script que foi construído em suporte para tópicos que não estão confinadas a um único núcleo?

WRAP UP

As respostas não eram o que eu esperava, mas o TCL resposta chega perto. Eu gostaria de adicionar perl, que (muito parecido com TCL) tem tópicos intérprete-base.

Jython, IronPython e queda Groovy sob a égide de combinar uma linguagem comprovada com a comprovada máquina virtual de outra língua. Obrigado por seus dicas neste direção.

Eu escolhi resposta do Aiden Bell como < em> aceitado Resposta . Ele não sugere uma linguagem particular, mas sua observação foi mais perspicaz para mim.

Foi útil?

Solução

sintaxe da linha pode ser estática, mas a implementação em sistemas operacionais e máquinas virtuais podem mudar

A sua linguagem de script pode usar verdadeira segmentação em um sistema operacional e falsos-threads em outro.

Se você tem requisitos de desempenho, pode valer a pena olhar para garantir que os tópicos de script cair para a camada mais benéfico no sistema operacional. tópicos do espaço do usuário será mais rápido, mas para bloquear grande parte threads do kernel atividade segmento vai ser melhor.

Outras dicas

Você parece usar uma definição de "linguagem de script" que pode levantar algumas sobrancelhas, e eu não sei o que isso implica sobre seus outros requisitos.

De qualquer forma, você já pensou em TCL? Ele vai fazer o que quiser, eu acredito.

Uma vez que você está incluindo linguagens de propósito bastante gerais em sua lista, eu não sei quão pesado uma implementação é aceitável para você. Eu ficaria surpreso se um dos zilhões de implementações regime não para threads nativas, mas em cima da minha cabeça, eu só me lembro da MzScheme acostumar, mas eu me lembro de apoio foi descartado. Certamente algumas das implementações Common Lisp fazer isso bem. Se Embeddable Common Lisp (ECL) faz, ele pode trabalhar para você. Eu não usá-lo embora, então eu não sei o que o estado dele é apoio threading é, e isso pode de depender claro na plataforma.

Atualizar Além disso, se bem me lembro, GHC Haskell não faz exatamente o que você está pedindo, mas pode efetivamente fazer o que quiser, pois, mais uma vez, se bem me lembro, ele irá girar de um nativo a thread por núcleo ou assim e depois executar seus fios através aqueles ....

Você pode livremente multi-thread com o Python idioma em implementações como Jython (na JVM, como @Reginaldo mencionar Groovy é) e IronPython (na NET). Para a implementação clássica CPython da linguagem Python, como @ o comentário de Dan menciona, multiprocessing (em vez de threading) é a maneira de usar livremente quantos núcleos que você tem disponível

Como Groovy se baseia na máquina virtual Java, você tem suporte para os verdadeiros tópicos.

F # no .NET 4 tem excelente suporte para programação paralela e extremamente bom desempenho, bem como suporte para arquivos .fsx que são projetados especificamente para script. Eu faço todo o meu script usando F #.

Uma resposta para esta pergunta já foi aceito, mas apenas para acrescentar que além de TCL, a única outra linguagem de script interpretado que eu conheço que suporta multithreading e programação thread-safe é Qore .

Qore foi projetado desde o até inferior ao suporte multithreading; todos os aspectos da língua é thread-safe; a linguagem foi projetada para suportar SMP escalabilidade e multithreading nativamente. Por exemplo, você pode usar o operador background para iniciar um novo tópico ou a classe ThreadPool para gerenciar um pool de threads. Qore também vai lançar exceções com erros de roscas comuns para que os erros de segmentação (como potenciais bloqueios ou erros com enfiar APIs como tentar agarrar um bloqueio que já é realizada pelo thread atual) são imediatamente visíveis para o programador.

Qore, adicionalmente, apoios e recursos de rosca; por exemplo, uma alocação DatasourcePool é tratado como um recurso de segmento local; se você esquecer de confirmar ou reverter uma transação antes de terminar seu segmento, o recurso de fio de manipulação para a classe DatasourcePool irá reverter a transação automaticamente e lançar uma exceção com a informação user-friendly sobre o problema e como foi resolvido.

Talvez ele poderia ser útil para você - uma visão geral dos recursos do Qore é aqui: Por que usar Qore? .

CSScript em combinação com extensões paralelas não deve ser uma má opção. Você escreve seu código em puro C # e, em seguida, executá-lo como um script.

Ele não está relacionado com o mecanismo de threading. O problema é que (por exemplo em python) você tem que ter intérprete exemplo para executar o script. Para adquirir o intérprete você tem que bloqueá-lo como ele está indo para manter a contagem de referência e etc e necessidade de evitar o acesso simultâneo a este objetos. usos Python pThread e eles são tópicos reais, mas quando você está trabalhando com python objetos apenas um thread está executando um outro esperando. Eles chamam isso de GIL (Global Interpreter Lock) e é o principal problema que faz com que o paralelismo verdadeiro impossível dentro de um processo.

https://wiki.python.org/moin/GlobalInterpreterLock

As outras linguagens de script pode ter o mesmo tipo de problema.

Guile suporta POSIX tópicos que eu acredito que são segmentos de hardware.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top