Python vs Java - Qual você escolheria para fazer programação concorrente e por quê? [fechadas]

StackOverflow https://stackoverflow.com/questions/1861457

Pergunta

Além disso, se não python ou java, então você mais geral escolher uma linguagem estaticamente digitada ou uma linguagem de tipo dinâmico?

Foi útil?

Solução

Eu escolheria o JVM mais de python, principalmente porque multi-threading em Python é impedido pela global Interpreter Bloqueio . No entanto, Java é pouco provável que seja o seu melhor quando em execução no JVM. Clojure ou Scala (usando atores) são ambos susceptível de ser melhor adequado para problemas multi-threaded.

Se você optar Java você deve considerar fazer uso do java.util.concurrent fortes bibliotecas e evitar primitivas multi-threading tais como sincronizados .

Outras dicas

Stackless Python ! Que uma variante Python feito especialmente para a simultaneidade.

Mas, no final, depende de sua plataforma de destino eo que você está tentando alcançar.

Para a simultaneidade, eu usaria Java. Pelo uso de Java, eu realmente significa Scala , que toma emprestado um monte de construções de simultaneidade de Erlang, mas é (provavelmente ) mais acessível para um desenvolvedor Java que nunca tenha usado tanto antes.

tópicos Python sofrem de ter que esperar para o Global Interpreter Lock, tornando verdadeira concorrência (dentro de um único processo) inatingível para os programas dependentes de CPU. Pelo que entendi, Stackless Python resolve algumas (mas não todas) das deficiências de simultaneidade de CPython, mas como eu não tê-lo usado, eu realmente não posso aconselhar sobre isso.

Eu não acho que o argumento é sobre a escolha língua ou estático ou tipagem dinâmica - é entre dois modelos de simultaneidade - memória compartilhada e passagem de mensagens. Que modelo faz mais sentido em sua situação e faz o seu idioma escolhido permitir que você faça uma escolha ou você é forçado a adotar um modelo sobre o outro?

Por que não ter um olhar para Erlang (que tem tipagem dinâmica) e passagem de mensagens , a Ator modelo , e ler por Joe Armstrong não gosta memória compartilhada. Há também uma discussão interessante sobre a simultaneidade java usando fechaduras e fios aqui no SO .

Eu não sei sobre Python, mas Java, juntamente com o modelo de fechaduras embutidas e fios, tem um mesasge passando quadro chamado Kilim .

Se não for Java / Python eu iria para uma linguagem funcional desde que assumiu efeitos colaterais em conta é uma das complexidades de escrever software concorrente. (Quanto a sua pergunta vai: este passa a ser estática digitado, mas compilador inferir maior parte do tempo)

Pessoalmente eu escolheria F #, desde que eu vi muitos bons exemplos de escrita de software concorrente com facilidade de usá-lo.

Como uma introdução: este homem é igualmente divertido como inspirando , mesmo um deve ter visto, se você não está interessado em F # que assim sempre.

Gostaria de usar Java, via Jython. Java tem capacidades de linha forte, e ele pode ser escrito utilizando a sintaxe Python com Jython, assim que você tem o melhor dos dois mundos.

Python propriamente dito não é muito bom com a concorrência, e é mais lento do que Java de qualquer maneira.

Mas se você tem problemas de concorrência e mãos livres, eu teria uma olhada Erlang porque foi projeto para tais problemas. Claro, você deve considerar Erlang somente se você tiver:

  • tempo para dominar um (muito) a nova tecnologia
  • controle sobre uma parte razoável da cadeia de produção, desde Erland precisa de algumas adaptações em sua caixa de ferramentas de ajuste

Nem. programação concorrente é notoriamente difícil de obter correta. Há a opção de usar uma linguagem de programação orientada processo como occam-pi que se baseia a ideia de comunicando processos sequenciais e o pi cálculo . Isso permite que a verificação de tempo de compilação para impasse e muitos outros problemas que surgem durante o desenvolvimento de sistemas concorrentes. Se você não gosta occam-pi, que eu não posso culpá-lo se você não, você poderia tentar ir o novo idioma do Google, que também implementa uma versão do CSP.

Para algumas tarefas, Python é muito lento. Seu programa Java único segmento poderia ser mais rápido do que a versão concorrente de Python em um computador multi-core ...

Eu gostaria de usar Java ou Scala, F # ou simplesmente ir para C ++ (MPI e OpenMPI).

O ambiente Java (JVM + bibliotecas) é melhor para a concorrência do que (C) Python, mas Java a linguagem é uma porcaria. Eu provavelmente iria com outra linguagem na JVM - Jython já foi mencionado, e Clojure e Scala ambos têm excelente suporte para a simultaneidade.

Clojure é particularmente bom - ele tem suporte para estruturas de dados persistente alto desempenho, agentes e memória transacional software. É uma linguagem dinâmica, mas você pode dar digite dicas para obter um desempenho tão bom quanto o Java.

Watch este vídeo na InfoQ por Richard Hickey ( criador do Clojure) sobre os problemas com as abordagens tradicionais para a simultaneidade e como Clojure manipula-lo.

Eu olhava para Objective-C eo Quadro Foundation. Assíncrono, programação concorrente é bem previstas.

Isto, obviamente, depende do seu acesso a ferramentas de desenvolvedor da Apple ou GNUStep, mas se você tem acesso a qualquer um que é um bom caminho a tomar com programação concorrente.

A resposta é que depende. Por exemplo você está tentando tirar proveito de múltiplos núcleos ou CPUs em uma única máquina ou você está querendo distribuir sua tarefa através de muitas máquinas? Quão importante é a velocidade vs. facilidade de implementação?

Como mencionado antes, Python tem o Global Interpreter Lock, mas você poderia usar o multiprocessamento módulo. Note-se que enquanto Stackless é muito legal, ele não irá utilizar múltiplos núcleos por conta própria. Python é geralmente considerado mais fácil de trabalhar do que Java. Se a velocidade é uma prioridade Java é geralmente mais rápida.

A biblioteca java.util.concurrent em Java faz escrever aplicações simultâneas em uma única máquina mais simples, mas você ainda precisa sincronizar em torno de qualquer estado compartilhado. Embora Java não é necessariamente a melhor linguagem para concorrência, há uma série de ferramentas, bibliotecas, documentação e as melhores práticas lá fora para ajudar.

Usando passagem de mensagens e imutabilidade em vez de tópicos e estado compartilhado é considerada a melhor abordagem para programação de aplicativos simultâneos. linguagens funcionais que desencorajam efeitos mutabilidade e secundários são muitas vezes preferido como resultado. Se distribuir seus aplicativos simultâneos em várias máquinas é uma exigência, vale a pena olhar para tempos de execução concebidos para este exemplo Erlang ou Atores Scala .

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