Menerapkan threading dalam suatu program itu sulit, ya, tetapi mengapa beberapa orang tidak akan mengimplementasikannya bahkan ketika ada kebutuhan yang jelas untuk itu.
Contoh: Program harus memuat dataset dari database, hal yang harus dilakukan adalah membuat koneksi dan mendapatkan data dari database di utas pekerja dan kemudian memuatnya ke GUI, meninggalkan utas GUI responsif bagi pengguna .
Tapi tidak, saya sudah berbicara dengan orang-orang yang tampaknya berpikir bahwa utas itu jahat dan buruk dan yang lainnya harus dihindari dengan cara apa pun. Saya bahkan pernah mendengar bahwa beberapa instruktur kelas menyarankan untuk tidak menggunakan utas dan karena itu tidak ingin menutupi penggunaannya. APA???
Dengan perangkat keras yang masuk ke multi-core, saya pikir kita perlu memahami utas lebih baik dan tidak takut untuk menggunakannya. Saya menganggapnya sebagai subjek yang menarik secara pribadi.
Jadi, hal-hal apa yang pernah Anda dengar tentang threading yang salah?
sumber
Jawaban:
Threading itu sulit
Tentu. Itu bisa saja. Namun, orang-orang mendapatkan ide ini di kepala mereka bahwa itu sangat sulit, sehingga mereka tidak repot-repot mencoba mencari tahu.
Bukannya tidak mungkin.
sumber
await
/async
kata kunci :)Bukan bagian threading yang sulit tetapi kebutuhan untuk sinkronisasi dan segala sesuatu yang datang dengan menggunakan utas. Dalam contoh GUI Anda, bagaimana Anda memberi tahu utas utama dataset siap diakses? Apakah Anda memberikan sejumlah panggilan balik? Apakah Anda menyebarkan sejumlah besar variabel cek di seluruh kode Anda? Dalam beberapa model GUI, misalnya Silverlight, ada sesuatu yang disebut afinitas utas yang berarti Anda tidak dapat mengakses elemen GUI yang duduk di utas utama dari utas lain sehingga Anda harus keluar dari cara Anda untuk memberi tahu utas utama informasi tertentu tentang utas. siap diproses lebih lanjut.
Saya belum benar-benar mendengar hal-hal yang salah tentang utas. Saya baru saja membaca sejumlah besar studi kasus situasional tentang sinkronisasi menjadi menyebalkan ketika algoritma apa pun yang Anda gunakan tidak paralel.
sumber
Threading menyelesaikan semua masalah Anda
Jika Anda mengalami masalah kinerja, sebaiknya jangan langsung melakukan threading.
Utasnya ringan
Utas ringan dalam puluhan dan dua puluhan. Memunculkan ribuan utas bukan.
Threading itu mudah [Java]
Sangat mudah untuk membuat utas, itu tidak berarti Anda akan mendapat manfaat darinya.
sumber
Anda pada akhirnya akan kehilangan keuntungan dari threading karena memperbaiki bug gila yang akan timbul dari penggunaan beberapa pustaka / fungsi yang tidak aman untuk thread (yang tidak Anda sadari) akan membutuhkan sinkronisasi yang berlebihan.
Anda memiliki kemungkinan yang jauh lebih tinggi untuk menemukan bug yang tidak akan dapat Anda perbaiki jika Anda menggunakan utas saat Anda tidak melakukannya.
sumber
Untuk meringkas poin bijak mengapa utas sulit digunakan: -
Hal Benar 1) Perlu sinkronisasi, dan keputusan desain yang hati-hati tentang apa yang harus dikunci dan kapan harus mengunci
2) Tidak ada kontrol pada aliran waktu jalankan
3) Sulit debugging
4) (Sangat sedikit kali) kompatibilitas platform: - Perpustakaan ada untuk menangani hal ini
Hal-hal Salah: -
1) Konsep membingungkan fungsi thread-safe dan re-entrant
2) Thread terlihat bagus di atas kertas tetapi sangat sulit untuk diterapkan
sumber
Jika Anda tidak ingin menulis tes untuk kode Anda, maka jangan gunakan utas.
Utas bukan untuk programer 'salin dan tempel' khas yang tidak memahami dasar-dasar yang mendasari OS dan arsitektur komputer. Karena 90% programmer hanya mengenal Java, ini sebenarnya bukan orang yang seharusnya menggunakan utas. Java membuat utas "mudah" tetapi saya telah melihat banyak programmer yang hanya berpikir bahwa jika mereka menggunakan struktur yang disinkronkan, kode mereka akan berfungsi dalam utas .... uhm no.
Yang sedang berkata, semua orang perlu memulai di suatu tempat, hanya saja jangan membuat proyek threading pertama Anda meningkatkan server backend produksi perusahaan Anda.
sumber
Saya tidak melihat bahwa situasi ini mewakili keharusan untuk menggunakan threading untuk setidaknya 4 alasan:
Pengambilan data harus sangat cepat.
Dalam banyak aplikasi Lini Bisnis, pengguna tidak ada hubungannya dengan aplikasi dalam 1 atau dua detik dia menunggu hasilnya. Selain itu, pengguna harus menunggu sampai data kembali dengan cara apa pun untuk menyelesaikan tugas yang diinginkan. Permintaan di sisi lain dapat dikodekan secara cerdas sehingga hanya mengambil satu halaman penuh informasi pada suatu waktu dan teknik optimasi lainnya dapat membantu waktu respons.
Dalam antarmuka berbasis web, tautan dapat dibuat aktif terkait model threading.
Threading menambah kompleksitas seperti yang Anda akui, beberapa pengembang mungkin tidak dapat menambahkan fitur atau men-debug kode kompleks.
Pendapat saya adalah: Gunakan threading ketika Anda harus karena pemeliharaan dan keandalan perangkat lunak lebih berharga bagi organisasi daripada keanggunan kode.
sumber