파이썬 대Java — 동시 프로그래밍을 위해 무엇을 선택하시겠습니까? 그리고 그 이유는 무엇입니까?[닫은]

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

문제

또한 Python이나 Java가 아닌 경우 정적 유형 언어 또는 동적 유형 언어를 더 일반적으로 선택하시겠습니까?

도움이 되었습니까?

해결책

나는 파이썬에서 JVM을 선택할 것입니다. 주로 Python의 멀티 스레딩이 글로벌 통역사 잠금. 그러나 JVM에서 실행할 때 Java는 최선을 다할 것 같지 않습니다. Clojure 또는 스칼라 (배우 사용)는 다중 스레드 문제에 더 적합 할 수 있습니다.

Java를 선택하면 java.util.concurrent 라이브러리 및 다음과 같은 다중 스레딩 프리미티브를 피하십시오 동기화.

다른 팁

확실히 스택이없는 파이썬! 파이썬 변형은 특히 동시성을 위해 만들어졌습니다.

그러나 결국 그것은 목표 플랫폼과 달성하려는 것에 달려 있습니다.

동시성의 경우 Java를 사용할 것입니다. Java를 사용하면 실제로 의미합니다 스칼라, Erlang의 동시성 구성에서 많이 빌려주지 만, 이전에 사용한 적이없는 Java 개발자가 더 접근 할 수 있습니다.

Python 스레드는 글로벌 통역사 잠금을 기다릴 필요가 없어 CPU 결합 프로그램에 대해 진정한 동시성 (단일 프로세스 내)을 달성 할 수 없습니다. 내가 이해 한 바와 같이, Stackless Python은 Cpython의 동시성 결함 중 일부 (전부는 아니지만)를 해결하지만 사용하지 않았기 때문에 실제로 조언 할 수는 없습니다.

논쟁은 언어 선택 또는 정적 또는 동적 타이핑에 관한 것이라고 생각하지 않습니다. 동시성의 두 모델 사이에 공유 메모리와 메시지 전달이 있습니다. 당신의 상황에서 어떤 모델이 더 의미가 있고, 선택한 언어가 선택을 할 수있게합니까, 아니면 다른 모델을 다른 모델보다 채택해야합니까?

보지 않겠습니까? Erlang (동적 타이핑이있는) 및 메시지 전달,, 배우 모델, 그리고 이유를 읽으십시오 Joe Armstrong은 공유 메모리를 좋아하지 않습니다. 자물쇠와 실을 사용한 Java 동시성에 대한 흥미로운 토론도 있습니다. 여기에.

파이썬에 대해 잘 모르겠지만 Java는 내장 잠금 및 스레드 모델과 함께 Mesasge 통과 프레임 워크가 있습니다. 킬림.

Java/Python이 아니라면 나는 기능적 언어 부작용을 고려하는 것은 동시 소프트웨어를 작성하는 복잡성 중 하나입니다. (귀하의 질문이 진행되는 한 :이 문제는 정적으로 입력되었지만 컴파일러는 대부분 추론했습니다).

개인적으로 나는 f#를 선택할 것입니다. 왜냐하면 나는 그것을 사용하여 동시 소프트웨어를 쉽게 작성하는 좋은 예를 많이 보았 기 때문입니다.

소개 :이 사람은입니다 영감을주는 것처럼 똑같이 재미 있습니다, 당신이 F#에 관심이 없다면 꼭보아야합니다.

나는 Jython을 통해 Java를 사용할 것입니다. Java는 강력한 스레드 기능을 가지고 있으며 Jython과 함께 Python 구문을 사용하여 작성할 수 있으므로 두 세계 중 최고를 얻었습니다.

파이썬 자체는 동시성에 실제로 좋지 않으며 어쨌든 Java보다 느립니다.

그러나 동시성 문제와 자유로운 손이 있다면, Erlang은 그러한 문제에 대한 설계 이었기 때문에 나는 Erlang을 살펴볼 것입니다. 물론, 당신은 다음과 같은 경우에만 Erlang을 고려해야합니다.

  • (매우) 새로운 기술을 마스터 할 시간
  • Erland는 도구 상자에 적합한 적응이 필요하기 때문에 생산 체인의 합리적인 부분을 제어합니다.

어느 것도 아니다. 동시 프로그래밍은 정확하게 맞지 않습니다. 프로세스 지향 프로그래밍 언어를 사용하는 옵션이 있습니다. Occam-pi 이는 아이디어를 기반으로합니다 순차적 프로세스 커뮤니케이션 그리고 pi 미적분학. 이를 통해 교착 상태 및 동시 시스템 개발 중에 발생하는 기타 많은 문제를 컴파일 시간 점검 할 수 있습니다. 당신이 Occam-Pi를 좋아하지 않는다면, 당신이하지 않으면 당신을 비난 할 수 없습니다. 가다 Google의 새로운 언어는 CSP 버전을 구현합니다.

일부 작업의 경우 파이썬이 너무 느립니다. 단일 스레드 Java 프로그램은 멀티 코어 컴퓨터의 동시 Python 버전보다 빠를 수 있습니다 ...

Java 또는 Scala, F#을 사용하거나 간단히 C ++ (MPI 및 OpenMPI)로 이동하고 싶습니다.

Java 환경(JVM + 라이브러리)은 (C)Python보다 동시성에 더 좋지만 Java 언어는 형편없습니다.나는 아마도 JVM에서 다른 언어를 사용할 것입니다. Jython은 이미 언급되었으며 Clojure와 Scala는 둘 다 동시성을 훌륭하게 지원합니다.

Clojure는 특히 좋습니다. 고성능 영구 데이터 구조, 에이전트 및 소프트웨어 트랜잭션 메모리를 지원합니다.이는 동적 언어이지만 Java만큼 좋은 성능을 얻기 위해 유형 힌트를 제공할 수 있습니다.

보다 이 비디오 InfoQ에서 Richard Hickey(Clojure 창시자)가 동시성에 대한 전통적인 접근 방식의 문제와 Clojure가 이를 처리하는 방법에 대해 설명합니다.

나는 Objective-C와 Foundation Framework를 살펴 보았습니다. 비동기식, 동시 프로그래밍이 잘 제공됩니다.

물론 이것은 Apple의 개발자 도구 또는 Gnustep에 대한 액세스에 달려 있지만, 어느 쪽이든 액세스 할 수 있다면 동시 프로그래밍을 통해 좋은 경로입니다.

대답은 그것이 의존한다는 것입니다. 예를 들어 단일 시스템에서 여러 코어 또는 CPU를 활용하려고합니까, 아니면 많은 컴퓨터에 작업을 배포하고 싶습니까? 속도 대 구현 용이성은 얼마나 중요합니까?

앞에서 언급했듯이 Python에는 글로벌 통역사 잠금 장치가 있지만 사용할 수 있습니다. 다중 프로세싱 기준 치수. 그 동안에는 주목하십시오 스택이 없습니다 매우 시원합니다 여러 코어를 사용하지 않습니다 그 자체로. 파이썬은 일반적으로 Java보다 작업하기 쉬운 것으로 간주됩니다. 속도가 우선 순위 인 경우 Java는 일반적으로 더 빠릅니다.

그만큼 java.util.concurrent Java의 라이브러리는 단일 시스템에 동시 응용 프로그램을 더 간단하게 작성하지만 공유 상태 주변에서 동기화해야합니다. Java는 반드시 동시성을위한 최고의 언어는 아니지만 많은 도구, 라이브러리, 문서화 및 모범 사례가 있습니다.

스레드 및 공유 상태 대신 메시지 전달 및 불변성을 사용하는 것은 동시 응용 프로그램을 프로그래밍하는 데 더 나은 접근 방식으로 간주됩니다. 돌연변이 및 부작용을 방해하는 기능적 언어가 종종 결과적으로 선호됩니다. 여러 머신에 동시 응용 프로그램을 배포하는 것이 요구 사항이라면,이를 위해 설계된 Runtimes를 살펴볼 가치가 있습니다. Erlang 또는 스칼라 배우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top