동시성 및 멀티 스레딩을 어떻게 연습 하시겠습니까? [닫은]


33

동시성, 멀티 스레딩 및 "무료 점심은 어떻게 끝났 는지 " 에 대해 읽었습니다 . 그러나 아직 직장에서 MT를 사용할 가능성이 없었습니다.

따라서 일부 오픈 소스 프로젝트에 대한 연습이나 참여를 통해 CPU Heavy MT를 실습하기 위해 무엇을 할 수 있는지에 대한 제안을 찾고 있습니다.

감사.

편집 : CPU 바운드 작업에 MT를 사용하는 오픈 소스 프로젝트 또는 스레드, 뮤텍스 및 잠금과 같은 도구 만 설명하는 서적 또는 논문보다는 MT를 사용하여 구현하는 데 관심이있는 알고리즘 또는 더 관심이 있습니다. MT를 사용하여 반응 형 GUI를 만드는 방법 ...



5
Q : 동시성 및 멀티 스레딩을 어떻게 연습 하시겠습니까? A : 저글링
Steven A. Lowe

@Steven : 그렇게 멀지 않습니다.
Robert Harvey

"무료 점심 식사가 끝났습니다"링크가 종료되었습니다
사용자

지금은 괜찮을 것입니다 ...
Xavier Nodet

답변:


15

C #의 스레딩에 대한 Joseph Albahari의 기사 는 내가 본 최고의 리소스 중 하나입니다.

목차는 다음과 같습니다. Task Parallel Library와 같은 일부 주제는 .NET에만 해당되지만, 대부분은 다른 언어, 특히 Java에 적용 할 수 있습니다.

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

Jon Skeet의 자습서를 여기에서 확인할 수도 있습니다. http://www.yoda.arachsys.com/csharp/threads/


3
Jon Skeet의 c # mutlithreading 페이지를 귀하의 답변에 추가하십시오 : yoda.arachsys.com/csharp/threads

1
둘째, Albahari의 5 개 챕터가 매우 유용했습니다. 연습하려면 간단한 연습이 있습니다. WCF (알고있는 경우)를 사용하여 멀티 플레이어 틱택 토 게임을 만들고 간단한 UI를 만드십시오. 각 플레이어의 응답으로 UI 컨트롤을 업데이트 해보십시오. 파이어 폭스 코드를 확인 했습니까?
Narayana

무엇을하는지 더 자세히 설명해 주시겠습니까? 그리고 질문에 대한 답변으로 추천하는 이유는 무엇입니까? "링크 전용 답변" 은 Stack Exchange에서 환영받지 못합니다
gnat

1
@ gnat : 목차를 내 대답에 붙여 넣었습니다.
Robert Harvey

존 소총의 튜토리얼에 대한 링크가 (내가 하늘빛 404 페이지를 얻고 있었다) 제대로 동작하지 않았다 - 여기의 아카이브입니다 : web.archive.org/web/20181010053742/http://www.yoda.arachsys.com
ArtOfWarfare

13

Java Concurrency in Practice 는 멀티 스레딩 및 동시성에 대한 최고의 책 중 하나입니다. 이 책의 모든 예제는 Java 기반이지만이 책은 MT 세계에 대한 확실한 설명을 제공합니다. MT 시스템을 개발할 때 많은 도움이되었습니다.


3
좋은 책 +1. 그리고 실제로는 행동이 아닌 Java 동시성입니다.
talonx


4

Joe Duffy의 Windows 에서 동시 프로그래밍 이 매우 유용 하다는 것을 알았습니다 . 깊이가 많이 있습니다. 그것은 펀치를 당기지 않으므로 발로 자신을 쏠 수있는 방법이 얼마나 좋은지 실제로 느낄 수 있습니다. MT 앱을 시작하는 모든 사람에게 줄 수있는 가장 좋은 조언입니다.


2

동시성과 병렬 처리에는 차이가 있습니다. 동시성은 2 개의 파일에 쓰는 것과 같이 한 번에 둘 이상의 작업을 수행하는 작업입니다. 병렬 처리는 여러 코어를 사용하여 프로그램 속도를 높이는 작업입니다.

동시성에 관해서는 무료 점심은 없지만 병렬 식으로 점심은 확실히 더 자유 롭습니다. http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
귀하의 구별이 잘못되었습니다. 동시성은 특정 시간에 둘 이상의 작업을 수행하지 않아도 겹치는 기간에 여러 작업을 완료하는 작업입니다 . 병렬 처리는 주어진 시간에 둘 이상의 일을하는 행위입니다.
Asad Saeeduddin

겹치면 한 번에 둘 이상의 작업을 수행하는 중입니다.
dan_waterworth 10

시작 시간과 종료 시간이 겹치는 경우 주어진 시간에 두 작업이 동시에 진행되고있는 것은 아닙니다. 두 개의 정수 목록이 주어지면 두 사람이 각 목록을 독립적으로 동시에 동시에 합치도록 할 수 있습니다 (동시 및 병렬 모두). 또는 한 목록의 항목과 다른 목록의 항목을 합산하는 것 사이에 앉아서 교대로 할 수 있습니다 동시 적이지만 병렬 적이 지 않은 목록.
Asad Saeeduddin

나는 그들이 동시에 일어나고 있다고 말하지 않았다. 한 번에 여러 가지 일을하고 있다고 말했습니다.
dan_waterworth

한 번에 여러 작업을 수행하는 것은 두 작업을 동시에 수행하는 것과 같습니다. 주어진 시간에 여러 가지 일이 발생하면 동시에 발생합니다.
Asad Saeeduddin

1

이 사이트에는 일반적으로 좋은 프로젝트 예제가 있습니다. www.planet-source-code.com

언어를 선택하고 멀티 스레딩을 검색하십시오. 소스 코드가있는 여러 프로젝트가 표시됩니다.


아직 투표가되지 않은 것에 놀랐습니다. 이것은 "병렬 및 동시 프로그래밍 연습 방법"이라는 질문에 중점을 둔 유일한 대답입니다. 다른 모든 답변은 다른 개념 인 "개념을 배우는 방법"이라는 질문을 다룹니다.
요시야
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.