동시성에서 다음


9

작년에 나는 Java에서 동시성에 대해 많은 노력을 기울였으며 많은 동시 패키지를 빌드하고 작업했습니다. 따라서 동시 세계의 개발 측면에서 저는 확신합니다. 또한 동시 프로그래밍에 대해 더 많이 배우고 이해하고 싶습니다.

그러나 나는 다음에 무엇에 대답 할 수 없습니까? 멀티 코어 처리와 관련된 더 많은 기술을 상속 받으려면 어떤 것을 배우거나 노력해야합니까? 다음 단계로 넘어갈 수있는 좋은 책 ( '실제로 동시성'및 '자바에서 동시 프로그래밍')이나 멀티 코어 처리와 관련된 리소스가 있다면?


이론적 기초를 놓친 경우 지금 학습하십시오. en.wikipedia.org/wiki/Pi-calculus
SK-logic

답변:


8

면책 조항-나는 동시성 전문가가 아니지만 공동 저자는 그를 파롯하고 있습니다 :-)

Doug Lea와 Brian Goetz의 책을 읽었으므로 지금까지 최고의 자료를 다루었습니다.

앞으로 Java 7에는 새로운 동시성 기능이 향상되었습니다. 가장 눈에 띄게 Fork / Join 프레임 워크와 새로운 비동기 NIO API가 있습니다.

Java 8은 람다 / 병렬 컬렉션으로 추가 동시성 향상을 도입 할 것입니다.

심각하게 살펴볼 또 다른 사항은 동시성을 처리하는 대체 방법입니다. 솔직히 말해서 Java의 '변경 가능한 객체 잠금'접근법은 API의 성능이 향상 되더라도 항상 오류가 발생하기 쉽습니다. 따라서 Java와의 상호 운용성을 유지하면서 동시성 문제를 처리하는 대체 방법으로 Scala의 액터 모델과 Clojure의 STM을 검토하는 것이 좋습니다.

[경고-> 자체 광고] 따라서 앞서 언급 한 모든 내용을 다루는 다가오는 책인 The Well-Grounded Java Developer를 자연스럽게 추천합니다 .

Groovy는 Gpars lib를 강력히 추천하지만 개인적으로 사용하지는 않았습니다.


이 책에 감사드립니다 :). 인도에서 권장 도서가 제공되지 않으므로 다른 좋은 책을 제안 해 주시겠습니까? PS : 동시성 연습은 책의 보석입니다
Jatin

@Martijn, 깔끔한! 나는 Groovy와 Scala에 대해 잠시 동안 궁금해했으며 더 자세히 배우기 위해 놀고 싶었습니다. 이 언어로 된 초보자를위한 책입니까, 아니면 이전 경험을 가정합니까?
maple_shaft

@Jatin Puri- '실제로 동시성'과 '동시 프로그래밍 동시성'에 대한 다른 제목을 모르겠습니다. Henry Wong의 'Java Threads'O'Reilly 제목이 있지만 그게 전부입니다.
Martijn Verburg

@maple_shift - 그것은 :-) 초보자를위한 것
마티 Verburg

2

D 프로그래밍 언어 는 동시 프로그래밍을위한 두 가지 패러다임을 제공합니다.

std.concurrency 는 기본 메모리 공유없이 메시지 전달을 제공합니다. D의 모든 전역 및 정적 변수는 스레드 로컬 기본 및 곳에 있습니다 spawnsend변경 가능한 포인터 간접 포함 된 메시지를 보낼 수 없습니다. shared키워드 를 통해 제한된 공유를 얻을 수 있으며 , 이는 유형 시스템에 의한 추가 검사를 수반합니다. 언어의 안전한 방언 밖에서 __gshared키워드를 사용하여 고전적인 C / Java 스타일 전역 / 공유 변수를 강제 할 수 있지만 모든 베팅은 레이스 안전에 한합니다. 이 모델은 Andrei Alexandresu의 책 "The D Programming Language"의 무료 장에 자세히 설명되어 있습니다.

std.parallelism 은 안전하지는 않지만 std.concurrency보다 융통성이 있으며 일반적으로 동시 처리보다는 데이터 처리 처리량을 높이기 위해 멀티 코어 데이터 및 작업 병렬 처리에 적합합니다. 병렬 foreach 루프, 비동기 함수 호출, 병렬 축소 등이 특징입니다. 레이스 안전 코드를보다 쉽게 ​​작성할 수있는 메커니즘을 제공하지만 여전히 어느 정도의 규율이 필요합니다.

D의 두 가지 주요 멀티 스레딩 패러다임에 대한 자세한 내용은 최근 주제에 대한 기사에서 찾을 수 있습니다 .


2

클로저를 보시길 강력히 권합니다

동시성에 대한 접근 방식은 매우 새롭고 Java 및 대부분의 다른 언어에서 볼 수있는 내용에있어 상당한 발전을 이루었습니다. 몇 가지 핵심 사항 :

  • ID와 상태가 분리됨 -OOP는 변경 가능한 멤버 변수 형태로 현재 상태로 객체 ID를 구성합니다. Clojure는 신뢰할 수있는 동시 프로그램 개발을 크게 단순화하는 방식으로 ID (관리 참조)와 상태 (불변 데이터 구조)를 엄격하게 분리합니다.
  • 영구 불변 데이터 구조 -모든 것이 불변이기 때문에 언제든지 데이터 / 상태의 스냅 샷을 찍을 수 있으며 그 아래에서 변경되지 않도록 보장 할 수 있습니다. 그러나 그보다 낫습니다. 이전 버전과 데이터를 공유하는 영구 데이터 구조입니다. 결과적으로, 작업은 변경 불가능한 데이터에 대한 COW (Copy-On-Write) 전략에 대해 지불하는 O (n)보다는 O (1)에 훨씬 가깝습니다.
  • 소프트웨어 트랜잭션 메모리 -잠금을 사용하는 대신 코드를 (dosync ...) 블록으로 묶으면 자동으로 트랜잭션으로 실행됩니다. 교착 상태의 위험이 없으며 복잡한 잠금 전략을 개발할 필요가 없습니다. 이는 위의 불변 데이터 구조와 결합 할 때 특히 큰 승리입니다. 효과적으로 Clojure 는 STM에서 다중 버전 동시성 제어 를 구현 합니다.
  • 함수형 프로그래밍 패러다임은 안정적인 동시 코드를 훨씬 쉽게 작성하는 데 사용됩니다. 기본적으로 불변 데이터 구조를 가져와 순수한 함수를 통해 실행하고 다른 불변 데이터 구조를 출력하면 코드의 동시성이 보장됩니다.

나는 좋을 것 소개로이 동영상을보고


1

Java를 확장하고 JVM에서 실행되는 Scala 언어를 살펴보십시오. Erlang에서 "Actors"라는 개념을 차용하고 동시성 오류 처리를위한 훌륭한 기능을 제공합니다.


1

완전히 새로운 차원으로 나아가고 싶다면 CUDA 를 사용한 프로그래밍을 살펴볼 수 있습니다 .

이를 통해 몇 가지 주요 CPU 코어 대신 그래픽 카드에 수백 개의 프로세싱 코어에 알고리즘을 배포 할 수 있습니다. GPGPU 기술을 사용하여 파이썬과 같은 고급 언어를 비교적 쉽게 가속화 할 수있는 언어 바인딩 도 있습니다 .


@Chiron-솔직히 말해서, 아무도 다른 사람이 이미 언급하지 않은 것에 놀랐습니다.
Mark Booth

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.