Eşzamanlılık ve çoklu iş parçacığını nasıl uygularsınız? [kapalı]


33

Eşzamanlılık, çok iş parçacığı ve "bedava öğle yemeğinin nasıl bittiği" hakkında okuyordum . Ancak henüz işimde MT kullanma imkanım olmadı.

Bu nedenle bazı açık kaynaklı projelere alıştırmalar veya katılım yoluyla CPU ağır MT alıştırması yapmak için neler yapabileceğim konusunda öneriler arıyorum.

Teşekkürler.

Düzenleme: CPU'ya bağlı görevler için MT kullanan açık kaynaklı projeler ya da yalnızca iş parçacığı, muteksler ve kilitler gibi araçları tanımlayan kitaplar veya makaleler yerine MT kullanarak gerçekleştirmesi ilginç olan algoritmalar ile daha fazla ilgileniyorum. MT, duyarlı GUI'lere sahip olmak için nasıl kullanılabilir?



5
S: Eşzamanlılık ve çoklu iş parçacığını nasıl uygularsınız? A: hokkabazlık yaparak
Steven A. Lowe

@Steven: Çok uzak değil, gerçekten.
Robert Harvey

"Ücretsiz öğle yemeği sona erdi" bağlantısı kesildi
Kullanıcı

Şimdi iyi olmalı ...
Xavier Nodet 19:11

Yanıtlar:


15

Joseph Albahari'nin C # ' daki Threading makalesi, gördüğüm en iyi kaynaklardan biri.

İçindekiler aşağıdadır. Görev Paralel Kitaplığı gibi bazı konuların .NET'e özgü olduğunu, ancak çoğunun diğer dillere, özellikle de Java'ya uygulanabilir olduğunu unutmayın.

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'in öğreticisine buradan da göz atabilirsiniz: http://www.yoda.arachsys.com/csharp/threads/


3
Jon Skeet'in c # mutlithreading sayfasını cevabınıza ekledim

1
İkincisi, Albahari'nin 5 bölümünün son derece yardımcı olmasını sevdim. Pratik yapmak için, işte basit bir alıştırma - WCF (eğer biliyorsanız) kullanarak çok oyunculu bir Tic Tac Toe oyunu ve basit bir UI oluşturun - UI kontrollerini her oyuncunun yanıtlarıyla güncellemeyi deneyin. Firefox kodunu kontrol ettiniz mi?
Narayana,

Bunun ne olduğunu ve neden soruyu yanıtlarken bunu neden tavsiye edersiniz? Yığın Borsası'nda "yalnızca bağlantı yanıtları" oldukça açık değildir
gnat

1
@gnat: İçindekiler bölümünü cevabımı yapıştırdım.
Robert Harvey,

Jon Skeet'in öğreticisinin bağlantısı çalışmıyor gibiydi (Azure 404 sayfa alıyordum) - burada bir arşivi: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare

13

Uygulamadaki Java Eşzamanlılığı, çok iş parçacıklı ve eşzamanlılıkla ilgili en iyi kitaplardan biridir. Kitaptaki bütün örnekler Java tabanlı olmasına rağmen, bu kitap MT dünyasının sağlam bir açıklamasını verir. MT sistemi geliştirirken bana çok yardımcı oldu.


3
+1 iyi kitap. Ve bu Pratikte Java Eşzamanlılığı, Eylem değil.
talonx

8

James Reinders tarafından yayınlanan Intel Threading Yapı Taşları kitabının 11. Bölümü , Paralel Hesaplama (veya Paralel Programlama) kullanan algoritmalar ve projelerden örneklere ayrılmıştır : bir alt sınıf bulucu, Yaşam Oyunu, Eratosthenes Elek, Matrix Çarpma ve daha sonra ağ paket filtreleme ve oyunlar gibi diğer daha gelişmiş konular.


4

Joe Duffy tarafından Windows'ta Eşzamanlı Programlamayı çok yardımcı buldum . Çok fazla derinlik var. Herhangi bir yumruk atmaz, bu yüzden kendinizi ayağınızdan vurmanın kaç yolu olduğu konusunda gerçekten iyi bir fikir edinirsiniz. Dikkatli olmamı sağladı, bu da MT uygulamaları ile başlayan herkese verebileceğim en iyi tavsiye.


2

Eşzamanlılık ve paralellik arasında bir fark var. Eşzamanlılık, aynı anda birden fazla şey yapma eylemidir, 2 dosyaya yazma gibi. Paralelcilik, programları çoklu çekirdek kullanarak hızlandırma eylemidir.

Eşzamanlılık söz konusu olduğunda ücretsiz öğle yemeği olmamasına rağmen, paralellikte öğle yemeği kesinlikle daha özgür oluyor, http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell gibi gelişmeleri görün


2
Senin ayrımın yanlış. Eşzamanlılık, çakışan zaman dilimlerinde birden fazla görevi tamamlama eylemidir, ancak herhangi bir zamanda birden fazla şey yapmak zorunda değildir . Paralelcilik, herhangi bir zamanda birden fazla şey yapma eylemidir.
Asad Saeeduddin

Örtüşürlerse, bir seferde birden fazla şey yapma sürecindesiniz.
dan_waterworth

Başlangıç ​​ve bitiş zamanları çakışırsa, bu, her iki görevin de herhangi bir zamanda aynı anda devam ettiğini göstermez. Toplanacak iki tamsayı listesi verildiğinde, her bir listeyi bağımsız ve eşzamanlı olarak eşzamanlı olarak aynı anda toplayacak iki kişi elde edebilirsiniz; bu, aynı anda hem paraleldir; eşzamanlı fakat paralel olmayan liste.
Asad Saeeduddin

Aynı anda olduklarını söylemedim. Bir seferde birden fazla şey yapmak dedim.
dan_waterworth

Bir seferde birden fazla şey yapmak, aynı anda iki şeyi yapmakla aynıdır. Belirli bir zamanda birden fazla şey oluyorsa, aynı anda gerçekleşiyorlar.
Asad Saeeduddin

1

Bu sitenin genel olarak bazı iyi proje örnekleri var. www.planet-source-code.com

Sadece bir dil seçin ve çoklu iş parçacığı arayın. kaynak kodlu bir takım projeler görmelisiniz.


Bunun henüz oylanmadığı için şaşırdım. "Paralel ve eşzamanlı programlamanın nasıl uygulanacağı" sorusuna odaklanan tek cevabı bu. Diğer her cevap farklı bir soru olan "kavramları nasıl öğreneceğinizi" sorusuna hitap eder.
Josiah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.