동시성 및 다중 스레드 응용 프로그램에 대한 학습을위한 최고의 리소스는 무엇입니까? [닫은]


16

멀티 스레드 응용 프로그램 및 동시 프로그래밍과 관련하여 지식 차이가 크다는 것을 깨달았습니다. 나는 과거에 몇 가지 기본 사항을 다루었지만 대부분은 내 마음에서 사라진 것 같습니다. 그리고 그것은 내가 더 알고 싶어하는 분야입니다.

동시 응용 프로그램 작성에 대한 학습을위한 가장 좋은 리소스는 무엇입니까? 나는 매우 실용적 인 사람이므로, 책에 구체적인 예가 들어 있으면 더 좋을지 모르지만 제안은 열려 있습니다. 나는 개인적으로 의사 코드 또는 C ++로 작업하는 것을 선호하며 게임 개발에 대한 기울기가 가장 좋지만 필수는 아닙니다.


"의사 코드 작업"을 선호하십니까? 나는 그것이 당신을 위해 작동하기를 바랍니다! :)
logc

답변:


6

최근에 내가 찾은 책은 다음과 같습니다.

실제 Java 동시성-Java 동시성 유틸리티의 많은 작성자가 작성했습니다. 다소 Java 고유이지만 스레드의 위험과 함정에 대해 매우 명확하고 유익합니다.

동시성 기술 (Art of Concurrency) -제목에서 알 수 있듯이 사실적인 이론적 논문이 아니라 실제로 유용한 조언과 사례에 대한 다소 민속적이고 땅에 대한 개요입니다.

JVM에서의 프로그래밍 동시성 -이것은 실제적 으로 이론적 인 논문이지만 매우 읽기 쉽고 통찰력이 있습니다. STM 또는 배우가 무엇인지, 그들의 장단점이 무엇인지, 왜 그런지 알아야하는 경우이 책이 알려줄 것입니다.

Intel Threading Building Blocks 또는 Apple Grand Central Station과 같은 많은 전용 유틸리티 라이브러리가 있습니다. 이들은 일반적으로 자체 전용 매뉴얼을 가지고 있으며, 일반적으로 상당히 훌륭하며, 무언가 큰 일을하고 싶다면 필수 독서입니다.


4

나는 Joe Albahari의 훌륭한 무료 스레딩 리소스를 발견했습니다 ...

C #의 스레딩

C #으로 기울어졌지만 개념은 다른 언어에도 완전히 적용됩니다. 또한이 자습서를 영어 및 기타 여러 언어로 된 PDF 다운로드로 제공합니다. 예제 코드의 조합, 코드에 대한 단계별 설명 및 예제와 함께 제공되는 우수한 시퀀스 및 상태 다이어그램으로 인해 권장됩니다.

이 튜토리얼은 다섯 부분으로 구성되어 있습니다.

책 형태로 여기에서 볼 수 있습니다 : 간단히 말하면 C # 4.0 (23 및 24 장)


1
+1, 이것은 .NET의 스레딩 / 동시성 / 병렬성에 대한 일반적인 "go-to"참조입니다.
Matthew King


1

C ++ 표준에는 스레딩 기능이 있습니다. 따라서 C ++로 배우고 싶다면 일반 스레딩 튜토리얼로 넘어 가기 전에 새로운 언어 기능에 대한 간단한 검토를 읽는 것이 좋습니다. 그런 다음 다시 돌아가서 표준을 자세히 검토하십시오.

실제로 스레딩은 대부분의 사람들이 이해한다고 생각하지만 이해하지 못하는 것 중 하나입니다. IBM 리서치 데이터베이스 (Java), Linux 파일 시스템 (C) 및 기타 매우 유명한 프로젝트에서 경쟁 조건을 식별 한 정적 분석 연구원의 이야기를 들었습니다. 일부 프로젝트는 동시성 및 스레딩 분야에서 존경받는 전문가가 작성했습니다. 스레드 안전 코드를 만드는 것은 어렵고 지식 격차가 코드 자체를 인식하는 사람들에게만 해당되는 것은 아닙니다.

게임 프로그래밍에서 직접 도움이되지는 않지만 MPI 자습서를 살펴 보는 것이 좋습니다 (죄송합니다, 특정 권장 사항 없음). 스레드를 사용하여 올바른 동시 코드를 작성하는 것은 어려운 것처럼 보이지만 메시지 전달을 사용하면 쉽게 수행 할 수 있습니다. 간접적으로, 다른 동시성 모델을 탐색하면 코드를 스레드로부터 안전하게 구성하는 데 대한 자체 생각 프로세스에 도움이되기를 바랍니다.


1

동시성에 대해 배우려면 동시성을 위해 설계된 언어를 사용하십시오. Golang 은 동시성에 대한 지원 기능과 대부분의 프로그래머가 언어를 쉽게 배울 수있는 C와 유사한 구문을 기본적으로 지원하므로 좋은 선택입니다.

여기에는 메시지 전달, 뮤텍스 등이 있으며 거의 ​​모든 동시성 요구 사항을 다루며 다른 언어에서는 더 복잡한 내용이 있습니다.

예를 들어 aC에서 MPI를 사용하여 다른 스레드에서 변수로 int를 수신하는 경우 :

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

다른 (사용자) 스레드에서 변수 a에 int를받는 중 :

a := <-c

Go 실습을 배우려면 브라우저에서 go 코드를 작성, 컴파일 및 실행할 수있는 go tour를 확인하십시오.

tour.golang.org

동시성 부분으로 건너 뛰려면

http://tour.golang.org/concurrency/1

저의 전 교수는 동시성 주제에 대해 CS 학생들에게 첫해에 매우 인기있는 단기 코스를 열었습니다. 동시성에 대해 신속하지만 철저하게 소개하려면 이것을 읽으십시오.

동시 프로그래밍의 기초

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