Apa sumber daya terbaik untuk belajar tentang konkurensi dan aplikasi multi-utas? [Tutup]

16

Saya menyadari bahwa saya memiliki kesenjangan pengetahuan yang besar ketika datang ke aplikasi multi-threaded dan pemrograman bersamaan. Saya telah membahas beberapa dasar di masa lalu, tetapi sebagian besar tampaknya hilang dari pikiran saya, dan itu jelas bidang yang saya inginkan, dan butuhkan, untuk menjadi lebih berpengetahuan.

Apa sumber daya terbaik untuk belajar tentang membangun aplikasi bersamaan? Saya orang yang sangat praktis berorientasi, jadi jika kata buku berisi contoh konkret lebih baik, tetapi saya terbuka untuk saran. Saya pribadi lebih suka bekerja dalam pseudocode atau C ++, dan kecenderungan pengembangan game adalah yang terbaik, tetapi tidak diperlukan.

Zepee
sumber
Anda lebih suka "bekerja di kodesemu"? Saya harap itu berhasil untuk Anda! :)
logc

Jawaban:

6

Ini adalah buku-buku yang menurut saya berguna belakangan ini:

Java Concurrency in Practice - oleh penulis sebagian besar utilitas konkurensi Java. Agak spesifik Jawa, tetapi sangat jelas dan informatif tentang bahaya dan jebakan utas.

The Art of Concurrency - bukan risalah teoretis yang gemilang seperti judulnya, pada kenyataannya, ringkasan dan saran-saran dan contoh-contoh berguna yang sederhana dan sederhana.

Pemrograman Concurrency pada JVM - Yang ini sebenarnya adalah risalah teoretis yang gemilang, tetapi sangat, sangat mudah dibaca dan berwawasan luas. Jika Anda perlu tahu apa itu STM atau aktor, apa kekuatan dan kelemahan mereka dan mengapa , buku ini akan memberi tahu Anda.

Ada banyak pustaka utilitas khusus seperti Intel Threading Building Blocks atau Apple's Grand Central Station - ini umumnya memiliki manual khusus mereka sendiri, yang biasanya cukup bagus, dan lagi pula bacaan wajib jika Anda ingin melakukan sesuatu yang besar dengan mereka.

Kilian Foth
sumber
4

Saya telah menemukan sumber daya threading gratis yang dipasang oleh Joe Albahari sangat baik ...

Threading dalam C #

Itu miring ke arah C # tetapi konsep sepenuhnya berlaku untuk bahasa lain. Ia juga menyediakan tutorial sebagai unduhan PDF dalam bahasa Inggris dan beberapa bahasa lainnya. Saya akan merekomendasikan itu karena kombinasi kode contoh, penjelasan langkah demi langkah dari kode dan urutan yang sangat baik dan diagram keadaan yang menyertai contoh.

Tutorialnya ada dalam lima bagian:

Ini tersedia dalam bentuk buku di sini: C # 4.0 secara singkat (bab 23 dan 24)

dodgy_coder
sumber
1
+1, ini adalah referensi "masuk" yang biasa saya gunakan untuk threading / konkurensi / paralelisme dalam .NET
Matthew King
4

Ada banyak model konkurensi sehingga Anda sebaiknya memiliki ide yang baik tentang semua sebelum memutuskan mana yang akan dipilih. Untuk itu, saya merekomendasikan buku Seven Concurrency Models dalam Seven Weeks: When Threads Unravel . Periksa ulasan dan TOC dan Anda dapat melihat mengapa ini adalah buku yang bagus. Dan itu juga baru-baru ini (2014).

sakisk
sumber
1

Sekarang ada fasilitas threading dalam standar C ++. Jadi jika Anda ingin belajar di C ++, saya sarankan membaca ulasan sederhana tentang fitur bahasa baru sebelum menuju ke tutorial threading umum. Kemudian kembali dan tinjau standar secara lebih rinci nanti.

Dalam praktiknya, threading adalah salah satu hal yang kebanyakan orang pikir mereka mengerti, tetapi tidak. Saya pergi ke sebuah ceramah dari seorang peneliti analisis statis yang mengidentifikasi kondisi ras dalam database penelitian IBM (Java), dalam sistem file linux (C), dan dalam beberapa proyek profil tinggi lainnya. Beberapa proyek ditulis oleh para ahli yang terkenal dalam concurrency dan threading. Ketahuilah bahwa membuat kode aman adalah sulit dan kesenjangan pengetahuan tidak eksklusif bagi mereka yang mengenalinya.

Meskipun tidak akan secara langsung membantu Anda dalam pemrograman game, saya akan merekomendasikan melihat beberapa tutorial MPI (maaf, tidak ada rekomendasi khusus). Meskipun tampaknya sulit untuk menulis kode konkuren yang benar dengan utas, tampaknya agak mudah melakukannya dengan melewati pesan. Secara tidak langsung, harapannya adalah bahwa mengeksplorasi model konkurensi yang berbeda akan membantu proses pemikiran Anda sendiri dalam menyusun kode Anda agar aman.

ccoakley
sumber
1

Untuk mempelajari tentang konkurensi, gunakan bahasa yang dirancang untuk konkurensi. Golang adalah pilihan yang baik karena memiliki dukungan bawaan untuk konkurensi dan sintaksis mirip-C yang membuat bahasa ini mudah dipelajari bagi sebagian besar programmer.

Ini memiliki pesan lewat, mutex dll yang mencakup hampir semua kebutuhan konkurensi Anda dan yang memiliki padanan yang lebih rumit dalam bahasa lain.

Misalnya, menerima int dari utas lain ke dalam variabel amenggunakan MPI di C:

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

Menerima int ke variabel a dari utas lain (pengguna):

a := <-c

Untuk mempelajari go praktik, periksa tur go, tempat Anda dapat menulis, menyusun, dan menjalankan kode go di browser Anda.

tour.golang.org

Untuk melompat ke bagian concurrency

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

Mantan profesor saya mengadakan kursus singkat yang sangat populer untuk mahasiswa CS tahun pertama tentang topik konkurensi. Untuk pengenalan yang cepat, tapi menyeluruh, tentang konkurensi, saya sarankan untuk membaca ini.

Dasar-dasar pemrograman bersamaan

Johan Wikström
sumber