Pertanyaan paling umum yang diajukan dalam wawancara baru -baru ini adalah bidang IO. Beberapa dari mereka telah dijawab, sementara beberapa dari mereka belum menjawab dengan baik. Baru -baru ini, saya mulai belajar lebih banyak tentang beberapa hal ini dan ingin meringkasnya.
Titik depan
1. Ruang Sistem Ruang Pengguna
Sistem Linux akan membagi suatu proses menjadi dua ruang, ruang pengguna, dan ruang sistem. Misalnya, pengkodean normal kami adalah semua ruang pengguna. Jika kita perlu memanggil fungsi sistem, seperti menyalin file sistem, kita perlu memanggil komponen sistem, memperoleh layanan kernel, dan operasi lengkap.
Dua tahap IO
Proses eksekusi IO dibagi menjadi dua tahap, menunggu untuk menjalankan salinan
Menunggu Siap: Kami tahu bahwa ketika kami melakukan operasi IO, data mungkin berasal dari aplikasi atau jaringan lain. Jika tidak ada data, sistem operasi akan menunggu. Saat ini, aplikasi juga dapat menunggu untuk menyalin: Salin data ke ruang kerja aplikasi
Memblokir dan tidak blokir, sinkron dan asinkron
Mari kita bicara tentang sinkronisasi dan asinkron pertama. Yang termudah adalah melihat apakah suatu utas atau proses mulai menyelesaikan IO. Saat menyinkronkan IO, sistem akan berhenti dan menunggu ini selesai sebelum melakukan hal -hal lain. Asynchronous IO menggunakan metode multi-threading untuk memulai utas baru untuk melakukan ini, dan Anda dapat melakukan hal-hal lain dan menunggu pemberitahuan.
Mari kita bicara tentang memblokir dan tidak memblokir. Kedua hal ini sebenarnya fokus pada keadaan program saat menunggu hasil panggilan. Pemblokiran berarti bahwa ketika Anda mendapatkan hasil ini, Anda akan menggantung sampai Anda menunggu hasil yang lengkap. Non-blocking berarti bahwa ketika proses tidak dapat mendapatkan hasilnya, tidak ada benang pemblokiran. Ini agak kusut. Ada penjelasan yang umum. Jika memblokir, saya ingin mendapatkan benda ini. Selama proses akuisisi, saya kehilangan CPU. Saya tidak akan mendapatkan CPU sampai hasilnya. Namun, jika saya tidak memblokir, saya akan terus memegang CPU, dan saya masih bisa memeriksanya.
Beberapa model IO
Ada 5 jenis saat ini
Memblokir io
Tipe IO paling tradisional, yaitu, membaca dan menulis akan diblokir
IO yang tidak blokir
Ketika pengguna memulai bacaan, itu tidak akan kehilangan CPU, itu akan terus memeriksa. Jika tidak berhasil, kesalahan akan dikembalikan. Jika menerima sinyal yang berhasil, itu akan memulai operasi baca untuk mendapatkan hasil lengkap.
Multiplexing IO
Ini adalah inti dari Java Nio. Akan ada utas yang mengelola status beberapa soket untuk memeriksa apakah Anda siap. Hanya ketika Anda menemukan bahwa Anda benar -benar siap, Anda akan menghubungi CPU untuk melakukan operasi IO. Ini lebih penting
Sinyal Drive IO
Gunakan lebih sedikit, abaikan
IO asinkron
Dapatkan utas untuk dieksekusi