Rumah > Operasi dan penyelenggaraan > operasi dan penyelenggaraan linux > Apakah perbezaan antara tinjauan pendapat dan pilih dalam linux

Apakah perbezaan antara tinjauan pendapat dan pilih dalam linux

WBOY
Lepaskan: 2022-07-11 17:00:12
asal
2209 orang telah melayarinya

Perbezaan antara tinjauan pendapat dan pilihan dalam Linux ialah: bilangan maksimum sambungan yang boleh dibuka oleh satu proses dalam pilihan ditakrifkan oleh makro "FD_SETSIZE" dan saiznya ialah 32 integer, manakala tinjauan pendapat menggunakan storan senarai terpaut, jadi tiada Had pada bilangan maksimum sambungan.

Apakah perbezaan antara tinjauan pendapat dan pilih dalam linux

Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.

Apakah perbezaan antara tinjauan pendapat dan pilihan dalam Linux

Pilihan yang digunakan oleh setiap proses mempunyai had pada bilangan sambungan maksimum, yang hanya boleh FD_SETSIZE, manakala tinjauan pendapat tidak mempunyai apa-apa had (menggunakan storan senarai terpaut);

Kedua-dua epoll dan pilih boleh menyediakan penyelesaian pemultipleksan I/O berbilang saluran. Semua boleh disokong dalam kernel Linux semasa, antaranya epoll adalah unik untuk Linux, manakala pilih harus ditetapkan oleh POSIX dan dilaksanakan dalam sistem pengendalian umum

pilih:

Select pada asasnya melaksanakan langkah pemprosesan seterusnya dengan menetapkan atau menyemak struktur data yang menyimpan bendera fd. Kelemahan ini adalah:

1 Bilangan fd yang boleh dipantau oleh satu proses adalah terhad, iaitu saiz port pendengaran adalah terhad.

Secara umumnya, nombor ini berkait rapat dengan memori sistem Nombor khusus boleh dilihat oleh cat /proc/sys/fs/file-max. Lalai untuk mesin 32-bit ialah 1024. Lalai untuk mesin 64-bit ialah 2048.

2 Apabila mengimbas soket, ia adalah imbasan linear, iaitu kaedah pengundian digunakan, yang kurang cekap:

Apabila. terdapat banyak soket, Setiap pilih() mesti melengkapkan penjadualan dengan merentasi Soket FD_SETSIZE Tidak kira Soket mana yang aktif, ia akan dilalui sekali. Ini membazirkan banyak masa CPU. Jika anda boleh mendaftarkan fungsi panggil balik untuk soket dan melengkapkan operasi berkaitan secara automatik apabila ia aktif, maka pengundian akan dielakkan. Inilah yang dilakukan oleh epoll dan kqueue.

3. Adalah perlu untuk mengekalkan struktur data untuk menyimpan sejumlah besar FD, yang akan menyebabkan overhed salinan yang tinggi apabila memindahkan struktur antara ruang pengguna dan ruang kernel

tinjauan pendapat:

Tinjauan pada asasnya sama dengan pilih Ia menyalin tatasusunan yang dihantar oleh pengguna ke ruang kernel, dan kemudian menanyakan status peranti yang sepadan dengan setiap fd. ia menambah item pada baris gilir menunggu peranti dan meneruskan Traversal, jika tiada peranti sedia ditemui selepas merentasi semua fd, proses semasa akan digantung sehingga peranti itu bersedia atau masa inisiatif itu akan tamat fd lagi. Proses ini telah melalui banyak laluan yang tidak perlu.

Ia tiada had pada bilangan maksimum sambungan kerana ia disimpan berdasarkan senarai terpaut, tetapi ia juga mempunyai kelemahan:

1 Sebilangan besar tatasusunan fd disalin sebagai keseluruhan dalam mod pengguna dan antara ruang alamat kernel, tidak kira sama ada penyalinan tersebut masuk akal.

2. Tinjauan juga mempunyai ciri yang "mencetuskan mendatar".

epoll:

epoll mempunyai dua mod pencetus: EPOLLLT dan EPOLLET ialah mod lalai dan ET ialah mod "kelajuan tinggi". Dalam mod LT, selagi fd masih mempunyai data untuk dibaca, epoll_wait akan mengembalikan acaranya setiap kali untuk mengingatkan program pengguna untuk beroperasi Dalam mod ET (cetusan tepi), ia hanya akan menggesa sekali sehingga terdapat data seterusnya masa. Tidak akan ada gesaan lanjut sebelum aliran masuk, tidak kira sama ada masih terdapat data yang boleh dibaca dalam fd. Oleh itu, dalam mod ET, apabila membaca fd, penimbalnya mesti dibaca, iaitu, sehingga nilai pulangan bacaan kurang daripada nilai yang diminta, atau ralat EAGAIN ditemui. Ciri lain ialah epoll menggunakan kaedah pemberitahuan kesediaan "event" untuk mendaftarkan fd melalui epoll_ctl Setelah fd sedia, kernel akan menggunakan mekanisme panggil balik seperti panggilan balik untuk mengaktifkan fd, dan epoll_wait boleh menerima pemberitahuan.

Mengapa epoll mempunyai mod pencetus EPOLLET?

Jika mod EPOLLLT digunakan, apabila terdapat sejumlah besar deskriptor fail sedia dalam sistem yang anda tidak perlu membaca atau menulis, mereka akan kembali setiap kali epoll_wait dipanggil, yang akan mengurangkan keupayaan program pemprosesan untuk mendapatkan semula fail sedia yang penting bagi kecekapan deskriptor fail... Jika mod pencetus tepi EPOLLET digunakan, apabila peristiwa boleh dibaca dan boleh ditulis berlaku pada deskriptor fail yang dipantau, epoll_wait() akan memberitahu pengendali untuk membaca dan menulis. Jika semua data tidak dibaca dan ditulis kali ini (contohnya, penimbal baca-tulis terlalu kecil), ia tidak akan memberitahu anda pada kali seterusnya anda menghubungi epoll_wait(), iaitu, ia hanya akan memberitahu anda sekali, sehingga deskriptor fail ialah Anda tidak akan dimaklumkan sehingga peristiwa baca-tulis kedua berlaku! ! ! Mod ini lebih cekap daripada pencetus mendatar, dan sistem tidak akan dibanjiri dengan sejumlah besar deskriptor fail sedia yang anda tidak pedulikan

Kelebihan epoll:

1. Tiada sekatan sambungan serentak maksimum, had atas FD yang boleh dibuka adalah lebih besar daripada 1024 (memori 1G boleh memantau kira-kira 100,000 port, tetapi tidak kaedah pengundian, dan ia tidak akan meningkat dengan bilangan FD Peningkatan kecekapan berkurangan. Hanya FD yang aktif dan tersedia akan memanggil fungsi panggil balik;

Iaitu, kelebihan terbesar Epoll ialah ia hanya mengambil berat tentang sambungan "aktif" anda dan tiada kaitan dengan jumlah sambungan. dalam persekitaran rangkaian sebenar, kecekapan Epoll Ia akan jauh lebih tinggi daripada pilih dan tinjauan pendapat.

3. Salinan memori, gunakan memori pemetaan fail mmap() untuk mempercepatkan penghantaran mesej dengan ruang kernel; iaitu, epoll menggunakan mmap untuk mengurangkan overhead salinan.

Ringkasan perbezaan antara pilih, tinjauan pendapat dan epoll:

1 Menyokong bilangan maksimum sambungan yang boleh dibuka melalui proses

pilih

Bilangan maksimum sambungan yang boleh dibuka dengan satu proses ditakrifkan oleh makro FD_SETSIZE dan saiznya ialah saiz 32 integer (pada 32- mesin bit, saiznya ialah 3232, dan begitu juga pada mesin 64-bit FD_SETSIZE ialah 3264), sudah tentu kita boleh mengubah suainya dan kemudian menyusun semula kernel, tetapi prestasi mungkin terjejas, yang memerlukan ujian lanjut.

pungutan suara

pungutan suara pada dasarnya adalah sama seperti pilih, tetapi ia tidak mempunyai had pada bilangan maksimum sambungan kerana ia disimpan berdasarkan senarai terpaut

epoll

Walaupun terdapat had atas bilangan sambungan, ia adalah sangat besar Mesin dengan memori 1G boleh membuka kira-kira 100,000 sambungan, dan mesin dengan memori 2G boleh membuka kira-kira 200,000 sambungan

<.> 2. FD meningkat secara mendadak Masalah kecekapan IO yang disebabkan oleh

pilih

Oleh kerana sambungan akan dilalui secara linear setiap kali ia dipanggil, peningkatan dalam FD akan menyebabkan " penurunan linear" dalam kelajuan traversal yang perlahan. isu prestasi".

poll

Sama seperti di atas

epoll

Oleh kerana pelaksanaan dalam kernel epoll adalah berdasarkan fungsi panggil balik pada setiap fd, hanya soket aktif panggilan balik akan dipanggil secara aktif, jadi apabila terdapat beberapa soket aktif, menggunakan epoll tidak mempunyai masalah prestasi penurunan linear daripada dua sebelumnya, bagaimanapun, apabila semua soket aktif, mungkin terdapat masalah prestasi.

3. Kaedah penghantaran mesej

pilih

Inti perlu menghantar mesej ke ruang pengguna, yang memerlukan tindakan salinan kernel

tinjauan pendapat

Sama seperti di atas

epoll

epoll dilaksanakan dengan berkongsi memori antara kernel dan ruang pengguna.

Ringkasan:

Ringkasnya, apabila memilih pilih, tinjauan pendapat atau epoll, anda harus mempertimbangkan peristiwa penggunaan khusus dan ciri-ciri ketiga-tiga kaedah ini.

1. Secara luaran, epoll mempunyai prestasi terbaik, tetapi apabila bilangan sambungan kecil dan sambungan sangat aktif, prestasi pilih dan tinjauan pendapat mungkin lebih baik daripada pemberitahuan epoll mekanisme memerlukan banyak panggilan balik fungsi.

2. Pilih tidak cekap kerana ia perlu ditinjau setiap masa. Tetapi ketidakcekapan juga relatif, bergantung pada keadaan, ia juga boleh diperbaiki melalui reka bentuk yang baik

Pembelajaran yang disyorkan:

Tutorial video Linux

Atas ialah kandungan terperinci Apakah perbezaan antara tinjauan pendapat dan pilih dalam linux. 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