Use case dari scala.bersamaan.pemblokiran

Saya menemukan scala.bersamaan.pemblokiran metode, dan menurut Scala dokumentasi ini adalah...

Digunakan untuk menunjuk sepotong kode yang berpotensi blok, yang memungkinkan saat ini BlockContext untuk menyesuaikan runtime's perilaku. Benar menandai memblokir kode dapat meningkatkan kinerja atau menghindari deadlock.

Saya memiliki beberapa keraguan:

  • apa faktor yang thread baru akan melahirkan?
  • Ini hanya berlaku untuk scala.bersamaan.ExecutionContext.Implicits.global eksekusi konteks atau untuk dibuat pengguna eksekusi konteks juga?
  • Apa yang terjadi jika saya bungkus setiap eksekusi dengan pemblokiran { ... }?
  • Penggunaan praktis kasus di mana kita harus menggunakan ini membangun.
  1. Thread baru melahirkan di fork/join renang ketika mendeteksi bahwa semua benang di fork/join renang menunggu satu sama lain menggunakan bergabung membangun, dan ada lebih banyak pekerjaan yang harus diselesaikan yang berpotensi menyelesaikan satu benang. Atau, jika salah satu dari ForkJoinWorker benang mengeksekusi blok kode yang lain dengan menggunakan bergabung, itu dapat memberitahu kolam renang menggunakan `ManagedBlocker ini.
  2. Hal ini berpotensi berlaku untuk setiap jenis eksekusi konteks -- ini berfungsi sebagai pemberitahuan kepada ExecutionContext implementasi kode dieksekusi oleh thread pekerja berpotensi pemblokiran pada beberapa kondisi, dan bahwa kondisi ini mungkin dapat diselesaikan dengan menghitung sesuatu yang lain dengan menggunakan beberapa thread lain. Konteks eksekusi mungkin atau tidak mungkin undang-undang ini. Pada saat ini (2.10, 2.11) pelaksanaan, memblokir hanya akan bekerja dengan standar global eksekusi konteks.
  3. Jika anda membungkus setiap eksekusi dengan memblokir anda akan menginduksi sedikit overhead runtime, jadi don't selalu melakukannya.
  4. Jika anda memiliki perhitungan yang berlangsung lama, misalnya detik atau menit, atau anda sedang menunggu di depan untuk menyelesaikan dengan menggunakan Menunggu, atau anda sedang menunggu di monitor's syarat untuk menjadi teratasi, dan kondisi ini dapat diatasi dengan beberapa tugas lain/masa depan yang harus mengeksekusi pada konteks eksekusi -- dalam semua kasus ini, anda harus menggunakan blocking.

EDIT:

Mempertimbangkan untuk mengambil lihat pada Bab 4 dalam Belajar Pemrograman Konkuren dalam Scala buku.

Komentar (13)