Rumah > masalah biasa > Perbezaan antara kumpulan benang ular sawa dan berbilang benang

Perbezaan antara kumpulan benang ular sawa dan berbilang benang

zbt
Lepaskan: 2023-06-20 16:51:35
asal
1459 orang telah melayarinya

Perbezaan antara kumpulan benang ular sawa dan berbilang benang: 1. Benang bergerak di bawah proses 3. Proses boleh mengandungi berbilang benang; proses yang berbeza ;5. Proses menggunakan lebih banyak sumber komputer daripada benang.

Perbezaan antara kumpulan benang ular sawa dan berbilang benang

1. Benang dan berbilang benang

Proses: Apabila program dilaksanakan, ia boleh dipanggil proses, yang termasuk berjalan program dan memori dan sumber sistem yang digunakan oleh program Satu proses terdiri daripada berbilang utas

Thread: A thread ialah aliran pelaksanaan dalam program tersebut Ia dikongsi. Urutan yang berbeza boleh melaksanakan fungsi yang sama.

Berbilang rangkaian: Multi-threading bermaksud program mengandungi berbilang strim pelaksanaan, iaitu, program boleh menjalankan berbilang thread yang berbeza pada masa yang sama untuk melaksanakan tugas yang berbeza, membenarkan satu program untuk mencipta berbilang thread execution yang selari untuk menyelesaikan tugasan masing-masing.

Faedah terbesar multi-threading: Meningkatkan penggunaan CPU (terutamanya sesuai untuk program intensif I/O, peningkatan kelajuan amat ketara)

Perbezaan antara proses dan benang:

Jadilah metafora Mudah: proses = kereta api, benang = gerabak

Benang bergerak di bawah proses (gerabak mudah tidak boleh berjalan)

Sesuatu proses boleh mengandungi berbilang benang (kereta api boleh mempunyai berbilang gerabak )

Sukar untuk berkongsi data antara proses yang berbeza (sukar bagi penumpang dalam satu tren untuk menukar ke tren lain, seperti pemindahan stesen)

Sangat sukar untuk berkongsi data antara benang yang berbeza dalam proses yang sama Mudah dikongsi (mudah untuk menukar dari gerabak A ke gerabak B)

Proses menggunakan lebih banyak sumber komputer daripada benang (menggunakan berbilang kereta api menggunakan lebih banyak sumber daripada berbilang gerabak)

Proses ini boleh dikembangkan kepada berbilang mesin dan proses ini sesuai untuk berbilang teras paling banyak (kereta api yang berbeza boleh berjalan di berbilang trek dan gerabak kereta api yang sama tidak boleh bergerak di trek yang berbeza)

Alamat memori yang digunakan oleh proses boleh dikunci, iaitu, apabila utas menggunakan beberapa memori yang dikongsi, utas lain mesti menunggu sehingga ia tamat sebelum mereka boleh menggunakan cebisan memori ini. (Contohnya, bilik mandi di dalam kereta api) - "Mutex lock"

Alamat memori yang digunakan oleh proses boleh mengehadkan penggunaan (contohnya, restoran di dalam kereta api, hanya bilangan maksimum orang dibenarkan untuk masuk, jika penuh, anda perlu menunggu di pintu, Tunggu sehingga seseorang keluar sebelum masuk) - "Semaphore"

2. Kelas threading berbilang benang

Kelas threading ialah modul berbilang benang yang paling biasa digunakan Kaedah mencipta benang adalah seperti berikut:

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, 
daemon=None)
Salin selepas log masuk

kumpulan: Lalai ialah Tiada.

sasaran: Nama fungsi yang akan dilaksanakan , ingat untuk tidak memasukkan kurungan fungsi.

nama: Nama utas, lalainya ialah Borang 'Thread-N'.

args: Tuple parameter objek boleh panggil yang dihantar masuk sasaran parameter.

kwargs: Kamus hujah kata kunci bagi objek boleh panggil yang diluluskan dalam sasaran parameter.

daemon: atribut mod daemon, lalai ialah Tiada.

Kaedah penting daripada objek benang:

start(): Mulakan thread Ia akan menjadikan kaedah run() dalam bebas dipanggil dalam thread.

run(): Kaedah ini mewakili aktiviti thread. .

sertai(masa tamat=Tiada): Biarkan utas pemanggil semasa menunggu sehingga utas itu tamat.

daemon: Menunjukkan sama ada utas itu ialah benang daemon, Betul atau Salah.

Buat contoh berbilang benang:

import random
import threading
import time
def awesome_function(name):
wait_time = random.randint(1, 10)
print('current thread name is :{0} and wait {1} s'.format(name, 
wait_time))
time.sleep(wait_time)
print('thread {} finished.'.format(name))
if __name__ == '__main__':
for i in range(0, 3):
t = threading.Thread(target=awesome_function, args=(i,))
t.start()
Salin selepas log masuk

Anda boleh melihat hasil larian yang saya rakamkan dahulu:

Contoh di atas memulakan 3 utas, dan 3 utas melaksanakan tugas secara serentak . Benang yang menyelesaikan tugas terlebih dahulu (yang mempunyai masa yang paling singkat.tidur) mengeluarkan hasil terlebih dahulu

3 Kelas kumpulan benang yang lebih berguna

Memulakan urutan baharu adalah sangat berguna. mahal kerana ia melibatkan interaksi dengan sistem pengendalian Dalam kes ini, menggunakan kumpulan benang boleh meningkatkan prestasi program, terutamanya apabila sejumlah besar program perlu dibuat dengan jangka hayat yang singkat Anda harus mempertimbangkan untuk menggunakan kumpulan benang apabila menggunakan benang.

Kumpulan utas menghasilkan sejumlah besar utas melahu apabila sistem dimulakan selagi program menyerahkan fungsi kepada kumpulan utas, kumpulan utas akan memulakan utas melahu apabila pelaksanaannya daripada fungsi berakhir, benang tidak akan mati, tetapi akan kembali ke kolam benang sekali lagi dan menjadi terbiar, menunggu fungsi seterusnya Pada masa yang sama, menggunakan kolam benang boleh mengawal bilangan benang serentak dalam sistem dengan berkesan. Apabila sistem mengandungi sejumlah besar utas serentak, prestasi sistem akan menurun secara mendadak dan malah menyebabkan jurubahasa Python ranap nombor.

Kolam benang dalam penggunaan arus perdana ialah ThreadPoolExecutor dalam modul concurrent.futures:

import random
import time
from concurrent.futures import ThreadPoolExecutor
def awesome_function(name):
wait_time = random.randint(1, 10)
print('current thread name is :{0} and wait {1} s'.format(name, 
wait_time))
time.sleep(wait_time)
print('thread {} finished.'.format(name))
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=3) as t:
for i in range(0, 3):
t.submit(awesome_function, i)
Salin selepas log masuk

Keputusan berjalan direkodkan seperti berikut:

Buat objek kumpulan benang dengan kapasiti maksimum 3 dan menyerahkannya melalui hantar Fungsi yang dilaksanakan dimasukkan ke dalam kumpulan benang Jika benang dalam kumpulan benang (benang 2) Apabila pelaksanaan selesai, utas terbiar (benang 3) dimasukkan ke dalam kolam, dan seterusnya, sehingga semua utas selesai, program berakhir.

Atas ialah kandungan terperinci Perbezaan antara kumpulan benang ular sawa dan berbilang benang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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