Domanda

Inoltre, se non python o java, quindi sarebbe più in generale, scegliere un staticamente tipizzato lingua o di tipo dinamico lingua?

È stato utile?

Soluzione

Io sceglierei la JVM su python, principalmente perché il multi-threading in Python è ostacolata dall' Global Interpreter Lock.Tuttavia, Java è improbabile che essere il vostro migliore quando si esegue la JVM. Clojure o Scala (utilizzando attori) sono entrambi adatti per multi-threaded problemi.

Se si sceglie di Java si dovrebbe considerare la possibilità di utilizzare il java.util.concorrenti biblioteche e di evitare il multi-threading primitivi sincronizzato.

Altri suggerimenti

Stackless Python ! Che una variante pitone fatto particolarmente per la concorrenza.

Ma alla fine dipende dalla vostra piattaforma di destinazione e ciò che si sta cercando di ottenere.

Per la concorrenza, vorrei utilizzare Java. Con l'utilizzo di Java, in realtà ho dire Scala , che prende in prestito molto dai costrutti di concorrenza di Erlang, ma è (probabilmente ) più accessibile a uno sviluppatore Java che non ha mai utilizzato né prima.

discussioni Python soffrono di dover attendere il Global Interpreter Lock, rendendo vera concorrenza (all'interno di un unico processo) irraggiungibile per i programmi CPU-bound. Mi pare di capire, Stackless Python risolve alcuni (ma non tutti) di carenze di concorrenza di CPython, ma come io non ho usato, non posso davvero consigliare su di esso.

Non credo che l'argomento è di circa la scelta della lingua o digitando statico o dinamico - è tra due modelli di concorrenza - memoria condivisa e messaggi. Quale modello ha più senso nella vostra situazione e non la lingua scelta consente di effettuare una scelta o stai costretti ad adottare un modello sopra l'altro?

Perché non dare un'occhiata alla Erlang (che ha tipizzazione dinamica) e message passing , il Attore modello , e leggere perché Joe Armstrong non piace memoria condivisa . C'è anche una interessante discussione su Java concorrenza con le serrature e le discussioni qui su SO .

Non so su Python, ma Java, con le serrature incorporati e il modello di discussioni, ha un quadro mesasge passaggio chiamato Kilim .

Se non Java / Python vorrei andare per un linguaggio funzionale da quando ha assunto effetti collaterali in considerazione è una delle complessità della scrittura di software concorrente. (Per quanto riguarda la tua domanda va: questo sembra essere digitato statica, ma compilatore infered maggior parte del tempo)

Personalmente vorrei scegliere F #, da quando ho visto un sacco di bei esempi di software di scrittura in concomitanza con facilità usando esso.

Come introduzione: quest'uomo è altrettanto divertimento come ispirazione , anche a deve avere visto se non siete interessati a F # cosa così mai.

Vorrei utilizzare Java, Jython via. Java ha una forte capacità di filo, e può essere scritto utilizzando la sintassi di Python con Jython, in modo da ottenuto il meglio di due mondi.

Python in sé non è veramente buono con la concorrenza, ed è più lento di Java in ogni caso.

Ma se avete problemi di concorrenza e le mani libere, mi piacerebbe dare un'occhiata a Erlang, perché è stata progettata per questo tipo di problemi. Naturalmente, è necessario considerare Erlang solo se si dispone di:

  • tempo per padroneggiare un (molto) la nuova tecnologia
  • il controllo su una parte ragionevole della catena di produzione, dal momento che Erland bisogno di alcuni adattamenti nella vostra cassetta degli attrezzi per adattarsi

Nessuno dei due. Programmazione concorrente è notoriamente difficile da ottenere corretta. V'è la possibilità di utilizzare un linguaggio di programmazione orientato al processo come Occam-pi che si basa dell'idea di comunicante processi sequenziali e la pi calcolo . Questo permette di compilazione controllando deadlock e molti altri problemi che sorgono durante lo sviluppo sistemi concorrenti. Se non ti piace Occam-pi, che non posso ti biasimo se non, si potrebbe provare a Vai il nuovo linguaggio da parte di Google che implementa anche una versione di CSP.

Per alcune attività, Python è troppo lento. Il vostro programma Java singolo thread potrebbe essere più veloce rispetto alla versione contemporanea di Python su un computer multi-core ...

Mi piacerebbe usare Java o Scala, F # o semplicemente andare in C ++ (MPI e OpenMPI).

L'ambiente Java (JVM + librerie) è meglio per la concorrenza di (C) Python, ma il linguaggio Java fa schifo. Io probabilmente andare con un'altra lingua sulla JVM - Jython è già stato menzionato, e Clojure e Scala entrambi hanno un eccellente supporto per la concorrenza.

Clojure è particolarmente buono - ha il supporto per le strutture di dati persistenti ad alte prestazioni, agenti e software di memoria transazionale. Si tratta di un linguaggio dinamico, ma si può dare di tipo suggerimenti per ottenere prestazioni buono come Java.

questo video su InfoQ da Richard Hickey ( creatore di Clojure) sui problemi con approcci tradizionali per la concorrenza, e come Clojure gestisce.

Mi piacerebbe guardare Objective-C e il quadro Fondazione. Asincrono, programmazione concorrente è ben previsto.

Questo naturalmente dipende l'accesso agli strumenti di sviluppo di Apple o GNUstep, ma se si ha accesso a uno dei due è una buona strada da prendere con programmazione concorrente.

La risposta è che dipende. Per esempio stai cercando di sfruttare di più core o CPU su un singolo computer o stai vogliono distribuire il compito in molte macchine? Quanto è importante la velocità vs facilità di implementazione?

Come accennato prima, Python ha il Global Interpreter Lock ma si potrebbe usare la multiprocessing modulo. Si noti che mentre Stackless è molto cool, è non utilizzerà più core da solo. Python è di solito considerato più facile da lavorare rispetto Java. Se la velocità è una priorità Java è solitamente più veloce.

La libreria java.util.concurrent in Java rende la scrittura di applicazioni simultanee su una singola macchina più semplice, ma ci si può comunque necessario sincronizzare intorno a qualsiasi stato condiviso. Anche se Java non è necessariamente il miglior linguaggio per la concorrenza, ci sono un sacco di strumenti, librerie, documentazione e le migliori pratiche là fuori per aiutare.

Uso passaggio di messaggi e immutabilità invece di fili e stato condiviso è considerato il migliore approccio alla programmazione applicazioni simultanee. I linguaggi funzionali che scoraggiano mutabilità e gli effetti collaterali sono spesso preferiti come risultato. Se distribuire le applicazioni simultanee su più macchine è un requisito, vale la pena di guardare i tempi di esecuzione progettati per questo esempio Erlang o Attori Scala .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top