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

Kaedah pelaksanaan dan analisis prinsip kunci penterjemah global GIL dalam Python

PHPz
PHPzke hadapan
2023-04-26 15:16:081451semak imbas

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 ... */ 
    }
}

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam