Python vs. Java - co wybrać do programowania współbieżnego i dlaczego? [zamknięte]

Również, jeśli nie python lub java, to czy bardziej ogólnie wybrać język statycznie-typed lub dynamic-type language?

Author: Mike Pennington, 2009-12-07

11 answers

Wybrałbym JVM zamiast Pythona, przede wszystkim dlatego, że wielowątkowość w Pythonie jest utrudniona przez globalną blokadę interpretera . Jednak Java jest mało prawdopodobne, aby być najlepszym podczas pracy na JVM. Clojure lub Scala (używając aktorów) są prawdopodobnie lepiej dostosowane do problemów wielowątkowych.

Jeśli wybierzesz Javę powinieneś rozważyć skorzystanie z java.util.współbieżne bibliotek i unikaj wielowątkowych prymitywów, takich jak zsynchronizowane.

 25
Author: johnstok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:32:18

Definitely Stackless Python ! Że wariant Pythona stworzony specjalnie dla współbieżności.

Ale w końcu zależy to od platformy docelowej i tego, co próbujesz osiągnąć.

 11
Author: halfdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-15 20:38:36

Do współbieżności użyłbym Javy. Używając Javy, mam na myśli Scalę , która wiele zapożycza z konstrukcji współbieżnych Erlanga, ale jest (prawdopodobnie) bardziej dostępna dla programistów Javy, którzy nigdy wcześniej nie używali żadnej z nich.

Wątki Pythona cierpią z powodu konieczności oczekiwania na globalną blokadę interpretera, co sprawia, że prawdziwa współbieżność (w ramach jednego procesu) jest nieosiągalna dla programów związanych z procesorem. Jak rozumiem, Python bez stosu rozwiązuje niektóre (choć nie wszystkie) współbieżności Cpythona braki, ale jako, że nie korzystałem z niego, nie mogę doradzić.

 9
Author: Ben James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-03 14:01:26

Nie wydaje mi się, aby argument dotyczył wyboru języka czy typowania statycznego czy dynamicznego - chodzi o dwa modele współbieżności - pamięć współbieżną i przekazywanie wiadomości. Który model ma większy sens w twojej sytuacji i czy wybrany przez ciebie język pozwala Ci dokonać wyboru, czy jesteś zmuszony do przyjęcia jednego modelu nad drugim?

Dlaczego nie spojrzeć na Erlang (który ma dynamiczne typowanie) i przekazywanie wiadomości , Modelaktora , i przeczytać Dlaczego Joe Armstrong nie jak pamięć dzielona . Istnieje również ciekawa dyskusja na temat współbieżności Javy przy użyciu zamków i wątków tutaj na SO .

Nie znam się na Pythonie, ale Java, wraz z wbudowanym modelem zamków i wątków, ma Framework przekazujący mesasge o nazwie Kilim .

 5
Author: blank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:53:03

Gdyby nie Java / Python wybrałbym Język funkcjonalny ponieważ uwzględnianie efektów ubocznych jest jedną z zawiłości pisania programów współbieżnych. (Jeśli chodzi o twoje pytanie : ten jest typowany statycznie, ale kompilator jest przez większość czasu inferowany)

Osobiście wybrałbym F# , ponieważ widziałem wiele ładnych przykładów pisania oprogramowania współbieżnego z łatwością za jego pomocą.

Jako wstęp: ten człowiek jest równie zabawny jak inspirujący , nawet musiałem zobaczyć, jeśli nie jesteś zainteresowany F # co tak zawsze.

 4
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:44:54

Użyłbym Javy, via Jython. Java ma silne możliwości wątków i może być napisana przy użyciu składni Pythona z Jython, więc masz najlepsze z dwóch światów.

Sam Python nie jest zbyt dobry w współbieżności i i tak jest wolniejszy niż Java.

Ale jeśli masz problemy z współbieżnością i wolne ręce, rzuciłbym okiem na Erlang, ponieważ został zaprojektowany na takie problemy. Oczywiście, należy rozważyć Erlang tylko wtedy, gdy:

  • czas opanować (bardzo) nową technologia
  • Erland potrzebuje pewnych dostosowań w swojej skrzynce narzędziowej, aby dopasować ją do swoich potrzeb]}
 2
Author: e-satis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:37:36

Żadne. Programowanie współbieżne jest notorycznie trudne do poprawienia. Istnieje możliwość użycia zorientowanego procesowo języka programowania, takiego jak occam-pi, który opiera się na idei komunikowania procesów sekwencyjnych i rachunku pi . Pozwala to na sprawdzenie czasu kompilacji pod kątem impasu i wielu innych problemów, które pojawiają się podczas jednoczesnego tworzenia systemów. Jeśli nie lubisz occam-pi, którego nie mogę winić, jeśli nie, możesz spróbować Go nowy język z google, który również implementuje wersję CSP.

 2
Author: Matthew Sowders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 20:40:39

W przypadku niektórych zadań Python jest zbyt wolny. Twój program Java z pojedynczym wątkiem może być szybszy niż współbieżna wersja Pythona na komputerze wielordzeniowym...

Chciałbym użyć Javy lub Scali, F # lub po prostu przejść do C++(MPI i OpenMPI).

 1
Author: Yin Zhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:38:43

Środowisko Java (biblioteki JVM+) jest lepsze dla współbieżności niż (C) Python, ale Java język jest do bani. Prawdopodobnie wybrałbym inny język na JVM - Jython już został wspomniany, a Clojure i Scala mają doskonałe wsparcie dla współbieżności.

Clojure jest szczególnie dobry - ma wsparcie dla wysokowydajnych trwałych struktur danych, agentów i pamięci transakcyjnej oprogramowania. Jest to dynamiczny język, ale możesz dać mu wskazówki, aby uzyskać wydajność równie dobra jak Java.

Obejrzyj ten film na InfoQ autorstwa Richarda Hickeya (twórcy Clojure) na temat problemów z tradycyjnym podejściem do współbieżności i tego, jak Clojure sobie z tym radzi.

 1
Author: Dave Kirby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:54:17

Przyjrzałbym się Objective-C i Frameworkowi Fundacji. Asynchroniczne, współbieżne programowanie jest dobrze przewidziane.

To oczywiście zależy od Twojego dostępu do narzędzi programistycznych Apple lub GnuStep, ale jeśli masz dostęp do któregokolwiek z nich, jest to dobra droga do zrobienia z programowaniem współbieżnym.

 1
Author: alesplin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 18:46:01

Odpowiedź jest taka, że to zależy. Na przykład, czy próbujesz wykorzystać wiele rdzeni lub procesorów na jednej maszynie lub chcesz podzielić swoje zadanie na wiele maszyn? Jak ważna jest szybkość a łatwość wdrożenia?

Jak wspomniano wcześniej, Python ma globalną blokadę interpretera, ale możesz użyć modułu multiprocessing . Zauważ, że chociaż Stackless jest bardzo fajny, to nie będzie używać wielu rdzeni samodzielnie. Python jest zwykle uważany za łatwiejszy w obsłudze niż Java. Jeśli szybkość jest priorytetem, Java jest zwykle szybsza.

Biblioteka java.util.concurrent w języku Java sprawia, że pisanie współbieżnych aplikacji na jednej maszynie jest prostsze, ale nadal będziesz musiał synchronizować się wokół dowolnego współdzielonego stanu. Chociaż Java niekoniecznie jest najlepszym językiem dla współbieżności, istnieje wiele narzędzi, bibliotek, dokumentacji i najlepszych praktyk, które mogą pomóc.

Używanie przekazywania i niezmienności wiadomości zamiast wątków i współdzielonego stanu jest uważany za lepsze podejście do programowania aplikacji współbieżnych. W rezultacie często preferowane są języki funkcyjne, które zniechęcają do zmienności i skutków ubocznych. Jeśli wymagana jest dystrybucja równoległych aplikacji na wiele maszyn, warto przyjrzeć się zaprojektowanym do tego środowiskom uruchomieniowym, np. Erlang lub Scala Actors.

 1
Author: Jamie McCrindle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 13:35:38