Rumah > Java > javaTutorial > teks badan

Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java

WBOY
Lepaskan: 2023-04-20 15:55:20
ke hadapan
2066 orang telah melayarinya

    1 Proses dan rangkaian

    1. Proses ialah unit terkecil peruntukan sumber untuk menjalankan program

    Proses ialah peruntukan sumber. daripada sistem pengendalian Unit terkecil, termasuk: CPU, ruang memori, cakera IO, dsb. Berbilang benang dalam proses yang sama berkongsi semua sumber sistem dalam proses dan proses adalah bebas antara satu sama lain. Proses ialah program dengan fungsi bebas tertentu yang menjalankan aktiviti berjalan pada set data tertentu Proses ialah unit bebas untuk peruntukan sumber dan penjadualan dalam sistem.

    Proses ialah aktiviti pelaksanaan program pada komputer. Apabila anda menjalankan program, anda memulakan proses. Jelas sekali, program mati dan statik, manakala proses aktif dan dinamik. Proses boleh dibahagikan kepada proses sistem dan proses pengguna. Semua proses yang digunakan untuk menyelesaikan pelbagai fungsi sistem pengendalian adalah proses sistem Ia adalah sistem pengendalian itu sendiri dalam keadaan berjalan Proses pengguna adalah semua proses yang dimulakan oleh anda.

    2. Thread ialah unit terkecil penjadualan CPU dan mesti bergantung pada proses untuk wujud

    Thread ialah entiti proses dan merupakan unit asas CPU penjadualan dan penghantaran Ia adalah unit asas yang lebih kecil daripada biasa yang mampu beroperasi secara bebas. Benang itu sendiri pada dasarnya tidak memiliki sumber sistem, hanya beberapa sumber yang penting untuk dijalankan (seperti pembilang program, satu set daftar dan timbunan), tetapi ia boleh berkongsi semua sumber yang dimiliki oleh proses dengan utas lain dalam proses yang sama.

    3. Benang ada di mana-mana

    Sebarang program mesti mencipta utas, terutamanya

    JavaTidak kira apa program, fungsi utama mesti dimulakan. utas utama; web Java membangunkan tugas berjadual, pemasa, JSP dan Servlet, mekanisme pemprosesan mesej tak segerak, antara muka akses jauh RM, dsb., sebarang Peristiwa pemantauan, onClick peristiwa pencetus, dsb. semuanya tidak dapat dipisahkan daripada pengetahuan tentang urutan dan konkurensi.

    2. Hubungan antara bilangan teras CPU dan bilangan utas

    1. Berbilang teras

    Berbilang teras: juga merujuk. kepada berbilang pemproses cip tunggal (Multipemproses Cip, dirujuk sebagai CMP), CMP telah dicadangkan oleh Universiti Stanford di Amerika Syarikat Ideanya adalah untuk menggabungkan SMP (pemproses simetri) dalam pemproses selari berskala besar Disepadukan ke dalam cip yang sama, setiap pemproses melaksanakan proses yang berbeza secara selari. Program jenis ini yang bergantung pada berbilang CPU untuk dijalankan secara selari pada masa yang sama adalah hala tuju penting dalam mencapai pengkomputeran berkelajuan ultra tinggi, yang dipanggil pemprosesan selari.

    2. Berbilang benang

    Berbilang benang : Berbilang benang serentak Biarkan berbilang benang pada pemproses yang sama dijalankan secara serentak dan Sumber pelaksanaan pemproses dikongsi.

    3. Bilangan teras dan utas

    Bilangan teras dan utas: Pada masa ini, arus perdana CPU ialah berbilang teras. Tujuan menambah bilangan teras adalah untuk menambah bilangan utas, kerana sistem pengendalian menjalankan tugas melalui utas Secara umumnya, mereka mempunyai 1:1 surat-menyurat, yang bermaksud teras empat. CPU Secara amnya mempunyai empat utas. Walau bagaimanapun, Intel memperkenalkan teknologi hyper-threading, yang menghasilkan hubungan 1:2 antara bilangan teras dan bilangan thread.

    Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java

    3. Mekanisme putaran hirisan masa CPU

    Apabila kita biasanya membangun, kita rasa kita tidak terhad oleh bilangan teras CPU benang pada bila-bila masa yang kita mahukan, walaupun pada CPU teras tunggal, mengapa? Ini kerana sistem pengendalian menyediakan mekanisme putaran hirisan masa CPU.

    Penjadualan putaran kepingan masa ialah salah satu daripada algoritma tertua, paling mudah, paling adil dan paling meluas digunakan, juga dikenali sebagai penjadualan RR. Setiap proses diberikan tempoh masa, dipanggil kepingan masanya, iaitu masa di mana proses itu berjalan.

    4. Parallelism and Concurrency

    Contohnya, jika terdapat lebuh raya A dengan 4 lorong, maka maksimum

    selari kenderaan ialah 4, ini Apabila bilangan kenderaan berjalan sebelah menyebelah di lebuh raya pada masa yang sama adalah kurang daripada 4, kenderaan boleh berjalan secara selari. Prinsip yang sama terpakai untuk CPU Satu CPU bersamaan dengan lebuh raya, dan bilangan teras atau utas adalah bersamaan dengan bilangan kenderaan yang boleh melalui sebelah menyebelah CPU Ia adalah bersamaan dengan mempunyai berbilang lebuh raya, setiap satu dengan berbilang lorong bersebelahan.

    Apabila bercakap tentang

    concurrency, pastikan anda menambah unit masa, iaitu, berapakah jumlah concurrency per unit masa? Sebenarnya tidak ada gunanya meninggalkan masa unit.

    Seperti kata pepatah, anda tidak boleh melakukan dua perkara sekaligus, dan begitu juga dengan komputer Pada dasarnya,

    CPU hanya boleh diperuntukkan kepada satu proses untuk dijalankan. proses ini. Komputer yang biasa kami gunakan hanya mempunyai satu CPU, yang bermaksud ia hanya mempunyai satu hati Untuk membolehkannya pelbagai guna dan menjalankan pelbagai proses pada masa yang sama, teknologi serentak mesti digunakan. Melaksanakan teknologi konkurensi agak rumit, dan yang paling mudah difahami ialah "algoritma penjadualan proses putaran hirisan masa".

    1. Concurrency

    并发: bermakna aplikasi boleh melaksanakan tugas yang berbeza secara bergantian Contohnya, melaksanakan berbilang utas pada satu teras CPU tidak bermakna melaksanakan berbilang utas pada teras. masa yang sama. Jika anda membuka dua Perlaksanaan dalam satu utas bermakna sentiasa menukar antara pelaksanaan kedua-dua tugas ini pada kelajuan yang hampir tidak dapat dilihat untuk mencapai kesan "pelaksanaan serentak" Cuma kelajuan pelaksanaan komputer terlalu pantas untuk kita perhatikan.

    2. Selari

    Selari: bermakna aplikasi boleh melaksanakan tugas yang berbeza pada masa yang sama Contohnya: anda boleh makan dan menonton TV pada masa yang sama. Kedua-dua perkara ini boleh dilakukan pada masa yang sama.

    **Perbezaan antara konkurensi dan selari ialah: Satu dilaksanakan secara bergilir-gilir, satu lagi dilaksanakan serentak**

    Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java

    5 , Pengaturcaraan Konkurensi Tinggi

    Disebabkan kelahiran berbilang terasCPU, pengaturcaraan berbilang benang dan konkurensi tinggi telah mendapat lebih banyak perhatian dan perhatian.

    1. Penggunaan sepenuhnya sumber CPU

    Daripada pengenalan CPU di atas, dapat dilihat bahawa tiada CPU teras pada pasaran yang tidak menggunakan banyak mekanisme konkurensi Thread, terutamanya apabila pelayan mempunyai lebih daripada satu CPU. Unit penjadualan asas program ialah utas Satu utas hanya boleh dijalankan dalam satu utas satu teras CPU Jika anda mempunyai CPU i3, perkara paling teruk yang boleh dilakukan ialah mempunyai kuasa pengkomputeran dua teras dan 4 utas: jika ia adalah benang, Itu akan membazirkan 3/4 daripada prestasi CPU: jika anda mereka bentuk berbilang benang, ia boleh berjalan pada berbilang benang berbilang teras berbilang CPU pada masa yang sama, menggunakan sepenuhnya CPU dan mengurangkan masa terbiar CPU , gunakan kuasa pengkomputerannya dan tingkatkan konkurensi.

    2. Mempercepatkan masa respons pengguna

    Sebagai contoh, fungsi muat turun yang sering kita gunakan, ramai rakan akan membuka keahlian tertentu, kerana versi keahlian membolehkan beberapa utas untuk dimuat turun, tidak. seseorang boleh bertolak ansur dengan satu Thread down, kenapa? Kerana muat turun berbilang benang adalah pantas.

    Apabila kami melakukan pembangunan program, kelajuan halaman web meningkat 1 saat Jika bilangan pengguna ramai, ia boleh meningkatkan bilangan penukaran. Dalam halaman web yang sering kami semak imbas, apabila penyemak imbas memuatkan halaman, ia akan membuka beberapa lagi benang untuk memuatkan sumber rangkaian untuk meningkatkan kelajuan tapak web yang sepadan. Berbilang benang dan konkurensi tinggi terdapat di mana-mana dalam komputer.

    3. Jadikan kod modular, tak segerak dan ringkas

    Sebagai contoh, jika kami melakukan projek e-dagang, membuat pesanan dan menghantar mesej teks dan e-mel kepada pengguna boleh dibahagikan. Dua langkah menghantar mesej teks dan e-mel kepada pengguna dipisahkan kepada dua modul berasingan dan diserahkan kepada utas lain untuk dilaksanakan. Ini bukan sahaja meningkatkan operasi tak segerak, meningkatkan prestasi sistem, tetapi juga menjadikan program modular, jelas dan mudah.

    6. Langkah berjaga-jaga berbilang benang

    1 Keselamatan antara utas

    Berbilang rangkaian dalam proses yang sama berkongsi sumber, iaitu, semuanya boleh mengaksesnya di alamat ingatan yang sama.

    Contohnya: jika hanya terdapat operasi baca pada pembolehubah global dan pembolehubah statik dalam setiap urutan, tetapi tiada operasi tulis, secara amnya, pembolehubah global ini selamat untuk rangkaian jika berbilang rangkaian melaksanakannya; pada masa yang sama Operasi Tulis secara amnya perlu mempertimbangkan penyegerakan benang, jika tidak keselamatan benang mungkin terjejas.

    2. Kebuntuan antara benang

    Untuk menyelesaikan masalah keselamatan antara benang, mekanisme kunci Java diperkenalkan, tetapi jika anda tidak berhati-hati, kebuntuan benang Java akan berlaku . Masalah berbilang benang, kerana benang yang berbeza sedang menunggu kunci yang tidak boleh dilepaskan sama sekali, menyebabkan semua kerja tidak dapat diselesaikan.

    Andaikata ada dua orang yang kelaparan, mereka mesti berkongsi pisau dan garpu dan bergilir-gilir makan Mereka berdua perlu mendapatkan dua kunci, berkongsi pisau dan berkongsi garpu. Katakan benang A mendapat pisau, dan benang B mendapat garpu. Benang A akan memasuki keadaan menyekat untuk menunggu garpu, manakala benang B akan menunggu pisau yang dimiliki oleh benang A. Ini hanyalah contoh rekaan, dan walaupun sukar untuk dikesan semasa runtime, situasi jenis ini berlaku sepanjang masa.

    3. Terlalu banyak utas akan menghabiskan sumber perkhidmatan dan menyebabkan ranap dan ranap

    Terlalu banyak utas boleh menyebabkan sistem mencipta sejumlah besar utas, yang akan menggunakan memori sistem dan "Pensuisan peralihan" CPU menyebabkan sistem ranap Jadi bagaimana kita boleh menyelesaikan masalah seperti ini?

    Sesetengah sumber sistem adalah terhad, seperti perihalan fail. Program berbilang benang boleh kehabisan sumber kerana setiap utas mungkin memerlukan satu sumber sedemikian. Jika bilangan utas agak besar, atau bilangan utas calon untuk sumber jauh melebihi bilangan sumber yang tersedia, sebaiknya gunakan kumpulan sumber. Salah satu contoh terbaik ialah pengumpulan sambungan pangkalan data. Setiap kali benang perlu menggunakan sambungan pangkalan data, ia mengambil satu daripada kumpulan dan mengembalikannya ke kumpulan selepas digunakan. Kolam sumber juga dipanggil perpustakaan sumber.

    Terdapat banyak perkara yang perlu diberi perhatian apabila membangunkan aplikasi berbilang benang. Saya harap semua orang dapat memahami bahayanya secara perlahan dalam kerja akan datang.

    7. Langkah berjaga-jaga untuk berbilang benang

    Benang bekerjasama antara satu sama lain untuk menyelesaikan kerja tertentu, contohnya: satu utas mengubah suai nilai objek, dan utas lain merasakan perubahan itu, dan kemudian melakukan operasi yang sepadan, keseluruhan proses bermula dalam satu utas, dan pelaksanaan terakhir adalah dalam utas lain. Yang pertama ialah pengeluar, dan yang kedua ialah pengguna Model ini mengasingkan "apa" dan "bagaimana". . Jika syarat dipenuhi, keluar dari gelung while untuk menyelesaikan kerja pengguna.

    Walau bagaimanapun, terdapat masalah berikut:

    • Sukar untuk memastikan ketepatan masa.

    • Sukar untuk mengurangkan overhed. Jika masa tidur dikurangkan, seperti 1 milisaat, pengguna boleh mengesan perubahan dalam keadaan dengan lebih cepat, tetapi ia mungkin menggunakan lebih banyak sumber pemproses, menyebabkan pembaziran yang tidak perlu.

    Mekanisme menunggu/pemberitahuan: bermakna satu utas A memanggil kaedah tunggu() objek O dan memasuki keadaan menunggu, manakala satu lagi utas B memanggil objek O kaedah notify() atau notifyAll(), thread A kembali daripada kaedah wait() objek O selepas menerima pemberitahuan, dan kemudian melakukan operasi seterusnya. Dua utas di atas melengkapkan interaksi melalui objek O, dan hubungan antara wait() dan notify/notifyAll() pada objek adalah seperti isyarat suis, yang digunakan untuk melengkapkan interaksi antara pihak yang menunggu dan pihak yang memberitahu.

    notify(): Maklumkan utas yang menunggu pada objek untuk kembali daripada kaedah tunggu adalah bahawa utas telah memperoleh kunci objek, dan tiada utas itu telah memperoleh kunci Masukkan semula keadaan MENUNGGU.

    notifyAll(): Maklumkan semua utas menunggu pada objek

    wait(): Benang yang memanggil kaedah ini memasuki keadaan MENUNGGU, Ia hanya akan kembali jika ia menunggu pemberitahuan daripada utas lain atau terganggu Perlu diingat bahawa selepas memanggil kaedah tunggu(), kunci objek akan dilepaskan.

    tunggu(lama): Tamat masa dan tunggu untuk tempoh masa Parameter di sini ialah milisaat, yang bermaksud menunggu sehingga n milisaat tamat masa dan kembali.

    tunggu (lama, int) : Untuk kawalan masa tamat yang lebih terperinci, yang boleh mencapai nanosaat

    Paradigma standard menunggu dan pemberitahuan ialah diikuti oleh pihak yang menunggu Prinsip berikut.

    • Dapatkan kunci objek.

    • Jika syarat tidak dipenuhi, maka panggil kaedah wait() objek, dan masih semak syarat selepas dimaklumkan.

    • Logik yang sepadan akan dilaksanakan jika syarat dipenuhi.

    Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java

    Pihak yang memberitahu mengikut prinsip berikut:

    • Dapatkan kunci daripada objek itu.

    • Tukar syarat.

    • Memberitahu semua urutan menunggu pada objek.

    Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java

    Sebelum memanggil kaedah siri tunggu() dan notify(), benang mesti mendapatkan kunci peringkat objek objek, iaitu, ia hanya boleh disegerakkan Panggil kaedah tunggu() dan maklumkan() siri kaedah dalam kaedah atau blok disegerakkan Selepas memasukkan kaedah tunggu(), benang semasa melepaskan kunci Sebelum kembali dari tunggu(), benang bersaing dengan utas lain untuk mendapatkan semula kunci dan laksanakan notify() Selepas utas siri kaedah keluar dari blok kod disegerakkan yang dipanggil notifyAll, mereka akan bersaing. Jika salah satu utas memperoleh kunci objek, ia akan terus melaksanakan Selepas ia keluar dari blok kod yang disegerakkan dan melepaskan kunci, utas lain yang telah dibangkitkan akan terus bersaing untuk memperoleh kunci, dan berterusan sehingga semua utas terjaga. telah menyelesaikan pelaksanaan.

    Siapa yang harus menggunakan notify dan notifyAll

    Gunakan notifyAll() sebanyak mungkin, gunakan notify() dengan berhati-hati, kerana notify() hanya akan membangunkan satu? benang dan kita tidak dapat memastikan Benang yang dibangkitkan mestilah benang yang kita perlukan untuk bangun.

    Atas ialah kandungan terperinci Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan