Rumah > Artikel > pembangunan bahagian belakang > Kaedah pelaksanaan dan analisis prinsip kunci penterjemah global GIL dalam Python
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)
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 ... */ } }
Dengan GIL, anda masih perlu mempertimbangkan keselamatan benang semasa pengaturcaraan
Pintas CPython dan gunakan pelaksanaan lain seperti JPython (penterjemah Python dilaksanakan dalam Java)
Letakkan kod prestasi utama ke dalam bahasa lain(biasanya C++)
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 kebuntuanAtas 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!