Saat ini saya adalah pengembang C # dengan pemahaman threading yang agak goyah.
Kedua tautan ini telah disarankan di pos lain:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Haruskah saya kembali ke dasar-dasar dan mungkin melihat beberapa teks ilmu komputer pada subjek?
Saya benar-benar merasa bahwa jika saya melompat dan menggunakan perpustakaan c # saya tidak akan benar-benar memiliki dasar pengetahuan yang kuat untuk dibangun. Saya pikir saya perlu mempelajari subjek ini dari awal seperti mahasiswa ilmu pengetahuan, lalu menggunakan perpustakaan C #.
Adakah yang bisa menyarankan pendekatan untuk belajar threading, mungkin beberapa tautan dan atau ide proyek?
Terima kasih sebelumnya!
Edit, terima kasih untuk semua balasan. Beberapa orang telah menyebutkan bahwa buku mungkin ide yang bagus, adakah yang bisa menyarankannya? Saya lebih suka bahasa agnostik. Adakah yang tahu kelas apa yang akan dicakup dalam gelar Ilmu Komputer ini? Saya mencoba ke google untuk beberapa catatan dan tugas online gratis.
Jawaban:
Tulis server web multi-utas. Anda akan belajar TON . Dan bukan hanya tentang threading.
sumber
Masalah produsen-konsumen adalah contoh klasik, dan ini membantu Anda untuk memahami tidak hanya threading, tetapi juga penjadwalan prosesor (dapat ditunjukkan menggunakan fork () untuk proses anak sebagai lawan utas) dan bagaimana program Anda berinteraksi dengan sistem operasi di belakang adegan.
Berikut ini ikhtisar hal-hal penting yang harus Anda pahami mengenai threading / forking 1. Bagaimana sistem operasi menjadwalkan tugas (misalnya algoritma round robin) 2. Penguncian Sumber Daya (Jika beberapa utas menggunakan sumber daya yang sama, Anda tidak ingin mereka melakukannya) mengaksesnya secara bersamaan - HAL-HAL BURUK TERJADI)
Inilah artikel wiki tentang masalah klasik ini: http://en.wikipedia.org/wiki/Producer-consumer_problem
Pada dasarnya, buat "Produser" yang menumbuhkan utas "Konsumen". Produser menghasilkan "sumber daya", dan konsumen mengkonsumsinya. Letakkan dalam satu lingkaran dan perhatikan apa yang terjadi (Anda akan terkejut bahwa pada akhirnya konsumen akan mengkonsumsi lebih banyak sumber daya kemudian tersedia karena metode yang tidak disinkronkan).
sumber
Pilih salah satu masalah klasik yang sangat paralel. Anda mungkin merasa lebih menarik untuk memilih satu dengan speedup super-linear.
Pertimbangkan mencari melalui daftar yang tidak disortir dan tidak indeks. Masalah ini paralel paralel. Pertama mengimplementasikan pencarian berulir tunggal, kemudian pencarian paralel yang naif. Terapkan mencuri kerja. Hasilkan beberapa set data acak dan jalankan ketiga versi pada set data yang sama. Hitung speedup.
sumber
Saya tidak berpikir buku teks adalah langkah terbaik berikutnya. Sebuah proyek adalah jalan yang harus ditempuh. Itu harus menjadi sesuatu yang Anda sukai.
Pertama kali saya melakukan threading, saya meningkatkan kinerja crawler web. Anda dapat menjelajah jauh lebih cepat jika Anda tidak melakukan semua IO jaringan Anda secara serial. Ini adalah proyek yang bagus untuk memulai karena Anda dapat mendekatinya dengan beberapa cara, tetapi itu tidak serumit, katakanlah, pemrograman GUI multithreaded. Ini juga tidak memerlukan banyak keahlian khusus (misalnya, hal-hal komputasi yang berat).
Jadi, cari tahu beberapa info untuk mengikis dan mulai meretas. Seharusnya tidak butuh waktu lama bagi Anda untuk melakukan sesuatu, itu akan menjadi pengantar yang lembut.
sumber
Memodelkan aplikasi Spy vs. Spy sederhana.
Setiap mata-mata berjalan pada utas terpisah.
Setiap mata-mata dapat menyebabkan kerusakan pada mata-mata lainnya, tetapi tidak secara langsung.
Setiap mata-mata dapat mencuri sumber daya berharga dari mata-mata lainnya, tetapi tidak secara langsung.
Kedua mata-mata ini memiliki sumber daya yang terbatas, dan harus membagikannya. Hanya satu mata-mata yang dapat menggunakan sumber daya yang diberikan pada suatu waktu.
sumber
Dari atas kepala saya: Edisi ke - 4 dari Buku Bruce Eckel "Thinking in Java" memiliki bab yang sangat panjang tentang threading (> 100 halaman - hampir sebuah buku kecil sendiri). Saya telah membaca edisi buku yang lebih lama, dan karenanya tidak membaca bab ini; tapi saya ingat salah satu posting blognya (atau catatan rilis bukunya), di mana ia mengklaim bahwa menulis ini sangat sulit dan pada akhirnya itu adalah prestasi nyata baginya. Coba lihat...
Selain itu, ada kursus video 2,5 jam di situs pelatihan komersial ini, tetapi Anda bisa mendapatkan uji coba gratis (harus meninggalkan data kartu kredit; jadi jangan lupa berhenti berlangganan)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
sumber
Itu selalu merupakan pilihan yang baik dan saya akan menyarankan Anda mengambil buku threading yang bagus untuk membiasakan diri Anda dengan threading. Saya belajar multithreading di Jawa dan pengetahuannya diterjemahkan dengan mudah ke dalam C #.
Jika Anda ingin contoh praktis, maka saya akan merekomendasikan Anda mencoba masalah filsuf makan .
Anda perlu mempelajari beberapa hal saat memasuki multithreading:
Saya tidak dapat memikirkan hal-hal lain saat ini. Tutorial Albahari terlihat sangat bagus!
sumber