Rumah > pembangunan bahagian belakang > Tutorial Python > Kaedah pelaksanaan dan analisis prinsip kunci penterjemah global GIL dalam Python

Kaedah pelaksanaan dan analisis prinsip kunci penterjemah global GIL dalam Python

PHPz
Lepaskan: 2023-04-26 15:16:08
ke hadapan
1498 orang telah melayarinya

1. Mengapa ada GIL

Pereka mahu mengelakkan masalah keadaan perlumbaan yang kompleks seperti pengurusan memori

Kerana CPython menggunakan sejumlah besar perpustakaan bahasa C, tetapi kebanyakannya bahasa C perpustakaan tidak selamat untuk benang asli (keselamatan benang akan mengurangkan prestasi dan meningkatkan kerumitan)

2 Cara GIL berfungsi

Apabila berbilang utas dilaksanakan, setiap utas bermula Apabila dilaksanakan, GIL akan dikunci. untuk menghalang utas lain daripada melaksanakan Begitu juga, selepas setiap utas melengkapkan tempoh pelaksanaan, GIL akan dikeluarkan untuk membolehkan utas lain mula menggunakan sumber

Terdapat satu lagi dalam Mekanisme CPython, dipanggil check_interval, CPython jurubahasa akan meninjau dan menyemak status kunci GIL utas sekali-sekala, jurubahasa Python akan memaksa utas semasa untuk melepaskan GIL supaya utas lain boleh berpeluang untuk melaksanakan

for (;;) {
    if (--ticker < 0) {
        ticker = check_interval;
    
        /* Give another thread a chance */
        PyThread_release_lock(interpreter_lock);
    
        /* Other threads may run now */
    
        PyThread_acquire_lock(interpreter_lock, 1);
    }
 
    bytecode = *next_instr++;
    switch (bytecode) {
        /* execute the next instruction ... */ 
    }
}
Salin selepas log masuk

3. keselamatan benang ular sawa

Dengan GIL, anda masih perlu mempertimbangkan keselamatan benang semasa pengaturcaraan

4.

Pintas CPython dan gunakan pelaksanaan lain seperti JPython (penterjemah Python dilaksanakan dalam Java)
Letakkan kod prestasi utama ke dalam bahasa lain​​​(biasanya C++)

5. Apabila memproses tugas intensif CPU, mengapakah multi-threading kadangkala lebih perlahan daripada single-threading?

GIL menggunakan mekanisme menjalankan benang secara bergilir-gilir GIL perlu terus bertukar antara benang Jika terdapat banyak benang atau masa berjalan adalah panjang, kehilangan prestasi yang disebabkan oleh penukaran mungkin melebihi satu benang <.>

6. Adakah anda rasa GIL adalah reka bentuk yang bagus?

Sebenarnya selepas Python 3, memang banyak perbincangan mengenai penambahbaikan atau pembatalan GIL Apakah pendapat anda Pernahkah anda diganggu oleh GIL dalam kerja harian anda?

GIL masih merupakan reka bentuk yang baik Walaupun ia kehilangan prestasi, ia memainkan peranan tertentu dalam memastikan sumber tidak akan bercanggah dan mengelakkan kebuntuan

Atas ialah kandungan terperinci Kaedah pelaksanaan dan analisis prinsip kunci penterjemah global GIL dalam Python. 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