Bagaimana Anda mempraktikkan konkurensi dan multi-threading? [Tutup]


33

Saya telah membaca tentang konkurensi, multi-threading, dan bagaimana "makan siang gratis berakhir" . Tetapi saya belum memiliki kemungkinan untuk menggunakan MT dalam pekerjaan saya.

Oleh karena itu saya mencari saran tentang apa yang bisa saya lakukan untuk mendapatkan latihan CPU MT berat melalui latihan atau partisipasi dalam beberapa proyek open-source.

Terima kasih.

Sunting: Saya lebih tertarik pada proyek-proyek sumber terbuka yang menggunakan MT untuk tugas-tugas yang terikat CPU, atau hanya algoritma yang menarik untuk diimplementasikan menggunakan MT, daripada buku atau makalah yang hanya menggambarkan alat-alat seperti utas, mutex dan kunci, atau bagaimana MT dapat digunakan untuk memiliki GUI responsif ...



5
T: Bagaimana Anda mempraktikkan konkurensi dan multi-threading? A: dengan juggling
Steven A. Lowe

@ Seven: Tidak terlalu jauh, sungguh.
Robert Harvey

Tautan "makan siang gratis sudah lewat" sudah mati
Pengguna

Seharusnya tidak apa-apa sekarang ...
Xavier Nodet

Jawaban:


15

Artikel Joseph Albahari tentang Threading di C # adalah salah satu sumber terbaik yang pernah saya lihat.

Daftar Isi di bawah ini. Perhatikan bahwa beberapa topik, seperti Pustaka Paralel Tugas, khusus untuk .NET, tetapi sebagian besar berlaku untuk bahasa lain, terutama 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

Anda juga dapat melihat tutorial Jon Skeet di sini: http://www.yoda.arachsys.com/csharp/threads/


3
Saya menambahkan halaman c # mutlithreading Jon Skeet ke jawaban Anda: yoda.arachsys.com/csharp/threads

1
Kedua, menyukai 5 bab Albahari sangat membantu. Untuk berlatih, inilah latihan sederhana - Buat game tic-tac-toe multipemain menggunakan WCF (jika Anda tahu), dan UI sederhana - coba perbarui kontrol UI dengan respons dari setiap pemain. Sudahkah Anda memeriksa kode firefox?
Narayana

maukah Anda menjelaskan lebih lanjut tentang apa yang dilakukannya dan mengapa Anda merekomendasikannya untuk menjawab pertanyaan yang diajukan? "Jawaban khusus tautan" tidak diterima di Stack Exchange
agas

1
@gnat: Saya menempelkan daftar isi ke jawaban saya.
Robert Harvey

Tautan ke tutorial Jon Skeet tampaknya tidak berfungsi (saya mendapatkan halaman Azure 404) - inilah arsipnya: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com / ...
ArtOfWarfare

13

Java Concurrency in Practice adalah salah satu buku terbaik tentang multi-threading dan konkurensi. Meskipun semua contoh dalam buku ini berbasis Java, buku ini memberikan penjelasan yang kuat tentang dunia MT. Itu banyak membantu saya ketika saya sedang mengembangkan sistem MT.


3
+1 buku bagus. Dan itu Java Concurrency in Practice, bukan Action.
talonx

8

Bab 11 buku Intel Threading Building Blocks oleh James Reinders dikhususkan untuk contoh-contoh algoritma dan proyek yang memanfaatkan Komputasi Paralel (atau Pemrograman Paralel): pencari substring, Game of Life, Sieve of Eratosthenes, Matrix Multiply, dan kemudian topik lebih lanjut lainnya seperti penyaringan paket jaringan dan permainan.


4

Saya menemukan Pemrograman Bersamaan di Windows oleh Joe Duffy sangat membantu. Ada banyak kedalaman. Itu tidak menarik pukulan, jadi Anda benar-benar merasakan betapa banyak cara untuk menembak diri sendiri di kaki. Ini membantu saya untuk berhati-hati, yang merupakan saran terbaik yang dapat saya berikan kepada siapa saja yang memulai dengan aplikasi MT.


2

Ada perbedaan antara konkurensi dan paralelisme. Concurrency adalah tindakan melakukan lebih dari satu hal sekaligus, seperti menulis ke 2 file. Paralelisme adalah tindakan mempercepat program dengan menggunakan banyak core.

Meskipun tidak ada makan siang gratis dalam hal konkurensi, secara paralel, makan siang itu menjadi lebih bebas, lihat perkembangan seperti http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
Perbedaan Anda tidak benar. Concurrency adalah tindakan menyelesaikan beberapa tugas dalam periode waktu yang tumpang tindih sementara tidak harus melakukan lebih dari satu hal pada waktu tertentu . Paralelisme adalah tindakan melakukan lebih dari satu hal pada waktu tertentu.
Asad Saeeduddin

Jika mereka tumpang tindih, Anda sedang dalam proses melakukan lebih dari satu hal sekaligus.
dan_waterworth

Jika waktu mulai dan berakhir tumpang tindih, ini tidak menunjukkan bahwa kedua tugas sedang berjalan secara bersamaan pada waktu tertentu. Diberi dua daftar bilangan bulat untuk dijumlahkan, Anda bisa meminta dua orang untuk menjumlahkan setiap daftar secara mandiri dan bersamaan, yang keduanya bersamaan dan paralel, atau Anda bisa duduk dan bergantian antara meringkas entri dalam satu daftar dan entri di yang lain daftar, yang bersamaan tetapi tidak paralel.
Asad Saeeduddin

Saya tidak mengatakan mereka terjadi secara bersamaan. Saya mengatakan melakukan lebih dari satu hal sekaligus.
dan_waterworth

Melakukan lebih dari satu hal dalam satu waktu sama dengan melakukan dua hal secara bersamaan. Jika banyak hal terjadi pada waktu tertentu, mereka terjadi secara bersamaan.
Asad Saeeduddin

1

Situs ini memiliki beberapa contoh proyek yang bagus secara umum. www.planet-source-code.com

Pilih saja bahasa dan cari multi-threading. Anda akan melihat sejumlah proyek dengan kode sumber yang tersedia.


Saya terkejut ini belum terpilih. Ini adalah satu-satunya jawaban yang saya lihat yang berfokus pada pertanyaan "bagaimana PRAKTEK pemrograman paralel & bersamaan". Setiap jawaban lain menjawab pertanyaan "bagaimana mempelajari konsep", yang merupakan pertanyaan yang berbeda.
Josiah
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.