Ketika belajar tentang server web dan cara kerjanya, Anda mungkin ingin tahu apakah mereka terus-menerus mendengarkan permintaan atau jika mereka menunggu sampai mereka menerima permintaan untuk bertindak. Dengan itu dalam pikiran, SuperUser Q & A postingan hari ini memiliki jawaban untuk memuaskan rasa ingin tahu pembaca.
Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Screenshot courtesy of xmodulo / Linux Screenshots (Flickr).
Pembaca SuperUser user2202911 ingin tahu bagaimana server web mendengarkan permintaan baru:
Saya mencoba memahami rincian 'level lebih dalam' tentang cara kerja server web. Saya ingin tahu apakah server, misalnya Apache, misalnya, secara terus-menerus melakukan polling untuk permintaan baru atau jika berfungsi dengan semacam sistem interupsi. Jika itu mengganggu, apa yang memicu interupsi? Apakah driver kartu jaringan?
Bagaimana cara server web mendengarkan permintaan baru?
Kontributor SuperUser Greg Bowser memiliki jawabannya untuk kami:
Jawaban singkatnya adalah semacam sistem interupsi. Pada dasarnya, mereka menggunakan pemblokiran I / O, yang berarti mereka tidur (blok) sambil menunggu data baru.
- Server membuat soket mendengarkan dan kemudian memblokir sambil menunggu koneksi baru. Selama waktu ini, kernel menempatkan proses menjadi tidur interupsi negara dan menjalankan proses lainnya. Ini adalah poin penting; memiliki proses polling secara terus menerus akan membuang sumber daya CPU. Kernel dapat menggunakan sumber daya sistem secara lebih efisien dengan memblokir proses sampai ada pekerjaan yang harus dilakukan.
- Ketika data baru tiba di jaringan, kartu jaringan mengeluarkan interupsi.
- Melihat bahwa ada interupsi dari kartu jaringan, kernel, melalui driver kartu jaringan, membaca data baru dari kartu jaringan dan menyimpannya dalam memori. (Ini harus dilakukan dengan cepat dan umumnya ditangani di dalam interrupt handler.)
- Kernel memproses data yang baru tiba dan menghubungkannya dengan soket. Suatu proses yang memblokir pada soket itu akan ditandai runnable, yang berarti bahwa sekarang memenuhi syarat untuk dijalankan. Ini tidak selalu berjalan dengan segera (kernel mungkin memutuskan untuk menjalankan proses lain).
- Pada waktu senggangnya, kernel akan membangunkan proses server web yang diblokir. (Karena sekarang runnable.)
- Proses server web terus dijalankan seolah-olah tidak ada waktu berlalu. Sistem pemblokiran panggilannya kembali dan memproses semua data baru. Lalu pergi ke langkah 1.
Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.