Pembolehubah kongsi berbilang benang dan mekanisme kerjasama dalam Java
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, terutamanyaJavaTidak 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 utas1. Berbilang terasBerbilang 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 benangBerbilang benang : Berbilang benang serentak Biarkan berbilang benang pada pemproses yang sama dijalankan secara serentak dan Sumber pelaksanaan pemproses dikongsi.
3. Bilangan teras dan utasBilangan 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.
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 tentangconcurrency, 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**
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.
Pihak yang memberitahu mengikut prinsip berikut:
Dapatkan kunci daripada objek itu.
Tukar syarat.
Memberitahu semua urutan menunggu pada objek.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Spring Boot memudahkan penciptaan aplikasi Java yang mantap, berskala, dan siap pengeluaran, merevolusi pembangunan Java. Pendekatan "Konvensyen Lebih Konfigurasi", yang wujud pada ekosistem musim bunga, meminimumkan persediaan manual, Allo
