Rumah  >  Artikel  >  Java  >  Pelayan tidak menyekat dalam Java NIO

Pelayan tidak menyekat dalam Java NIO

王林
王林ke hadapan
2023-08-19 18:49:071301semak imbas

Java NIO中的非阻塞服务器

Pelayan Tidak menyekat

Java NIO (Input/Output Baharu) ialah aplikasi rangkaian dan pengendalian fail yang sangat berkuasa yang berfungsi sebagai alternatif kepada API IO standard Java Disebabkan penambahan ciri yang lebih canggih sejak pengenalan JDK 4, ia telah muncul dengan cepat sebagai pilihan. Sistem I/O di kalangan ramai jurutera.

Sokongan yang dipertingkatkan untuk pengendalian fail dan fungsi sistem fail yang disediakan oleh Java NIO adalah salah satu ciri pembezaannya. Oleh kerana kelas fail NIO mempunyai fungsi yang begitu kuat, ia digunakan secara meluas dalam pemprosesan fail.

Jika anda melihat dengan teliti, anda akan mendapati bahawa pakej java.nio menentukan kelas penimbal yang digunakan dalam API NIO. Bahagian yang terbaik ialah ia dicipta untuk membolehkan pengaturcara Java mencapai I/O pantas tanpa menulis kod asli.

Menyekat dan tidak menyekat I/O

Disebabkan penggunaan I/O yang tidak menyekat, pelayan tidak menyekat boleh mengendalikan berbilang permintaan secara serentak melalui proses atau rangkaian yang sama. Fikirkan proses menyekat sebagai satu barisan di pejabat tiket, di mana setiap pelanggan mesti menunggu orang di hadapan untuk dilayan sebelum meneruskan.

Sebaliknya, proses tanpa sekatan adalah seperti pelayan di restoran yang cuba melayani semua pelanggan secara serentak dengan berputar melalui mereka dan menjaga pesanan mereka.

Pelayan penyekat berfungsi secara serentak, melengkapkan setiap permintaan sebelum beralih ke permintaan seterusnya. Ini boleh mengakibatkan masa menunggu pelanggan yang lama dan memerlukan berbilang benang untuk mengendalikan setiap permintaan, menjadikannya lebih menuntut CPU. Pelayan tidak menyekat, sebaliknya, mengambil pendekatan tak segerak, membenarkan satu utas mengendalikan berbilang pertanyaan pada masa yang sama, bertindak balas kepada penyiapan setiap permintaan.

Ciri-ciri Java NIO

Java NIO mempunyai beberapa ciri unik yang membezakannya daripada sistem IO lain. Berikut adalah ciri utama Java NIO:

  • AIO segerak dan Tidak Menghalang − Ciri ini membolehkan utas melakukan tugasan lain semasa data dibaca ke dalam penimbal Daripada menunggu data dimuatkan sepenuhnya sebelum pemprosesan dimulakan, utas boleh meneruskan kerja mereka semasa data sedang dibaca.

  • Pendekatan berorientasikan penimbal − Java NIO menyimpan data dalam penimbal supaya ia boleh diakses dan diproses dengan cepat. Apabila data diperlukan, ia diambil daripada penimbal dan diproses.

Algoritma

  • Langkah 1 − Sebagai permulaan, kita mesti mengimport kelas yang diperlukan menggunakan pernyataan import.

  • Langkah 2 − Seterusnya, kita perlu mencipta kelas awam bernama "WriteExample2."

  • Langkah 3 − Di dalam kelas ini, kita mesti menentukan fungsi utama kekosongan statik awam yang menerima hujah pembolehubah jenis String.

  • Langkah 4 − Sekarang, buat fail sementara dengan sambungan ".txt" dengan menggunakan kaedah Files.createTempFile() Untuk menulis, kita boleh menggunakan kaedah Files.write() bersama-sama dengan objek lelaran yang memegang rentetan "Hello" dan "world."

  • Langkah 5 − Untuk membaca setiap bait daripada fail yang ditakrifkan oleh objek Path yang dikembalikan oleh fungsi createTempFile() Files, kita boleh menggunakan fungsi Files.readAllBytes() Selepas itu, kita perlu menukarnya kepada a Rentetan menggunakan pembina String() baharu.

  • Langkah 6 − Akhir sekali, cetak String ke konsol menggunakan kaedah System.out.println().

Contoh 1

Kod Java ini mencipta fail teks sementara dan menulis "Hello" dan "world" padanya kemudian membaca fail dan mencetak kandungannya Kod menggunakan kelas Fail daripada pakej Java NIO untuk mengendalikan operasi fail.

package com.tutorialspoint.example.files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;

public class WriteExample2 {
   public static void main(String... args) throws IOException {
      Path path = Files.createTempFile("test-file", ".txt");
      Iterable<String> iterable = Arrays.asList("Hello", "world");
      Files.write(path, iterable);
      byte[] bytes = Files.readAllBytes(path);
      System.out.println(new String(bytes));
   }
}

Output

Hello
world

Komponen Java NIO

Java NIO dibina di atas tiga komponen asas: Penampan, Saluran dan Pemilih Berikut ialah gambaran ringkas bagi setiap −

  • Buffer− Penampan ialah blok memori yang digunakan untuk menyimpan data sementara semasa ia dipindahkan dari satu lokasi ke lokasi lain. Dalam Java NIO, penimbal digunakan untuk membaca dan menulis data dengan mudah.

  • Saluran - Dalam Java NIO, saluran mewakili sambungan ke objek yang boleh melakukan operasi IO, seperti fail dan soket. Saluran bertanggungjawab untuk memindahkan data antara penimbal dan objek yang diwakilinya.

  • Pemilih − Pemilih ialah komponen Java NIO yang digunakan untuk memantau satu atau lebih saluran untuk acara, seperti kesediaan untuk melaksanakan operasi I/O Apabila saluran sudah sedia, pemilih boleh bangun dan membenarkan urutan yang sesuai untuk mengendalikan operasi.

Komposisi Pelayan Tidak Menyekat

Pelayan yang tidak menyekat terdiri daripada saluran paip IO yang tidak menyekat, iaitu rangkaian komponen yang memproses kedua-dua operasi IO membaca dan menulis dalam cara yang tidak menyekat Berikut ialah pecahan cara saluran paip ini berfungsi −

  • Pemilih digunakan oleh setiap komponen dalam saluran paip untuk menentukan sama ada saluran mempunyai data untuk dibaca.

  • Apabila ada data, komponen membacanya dan memberikan output berdasarkannya, selepas itu, output ditulis semula ke saluran.

  • Berdasarkan komponen, paip IO yang tidak menyekat boleh membaca dan menulis data, serta melaksanakan kedua-dua operasi.

  • Komponen ini membaca data daripada saluran melalui pemilih. Java NIO menguruskan operasi IO yang tidak menyekat, manakala pemilih dan kekunci pemilihan saluran boleh dipilih mentakrifkan operasi IO berganda.

  • Saluran paip IO yang tidak menyekat membahagikan data kepada mesej yang tersusun secara logik atau digabungkan bersama pemprosesan data tidak menyekat Ini adalah setanding dengan menggunakan kelas StreamTokenizer Java untuk menoken aliran data sebelum memprosesnya.

  • .
  • Model tidak menyekat menggunakan pemilih Java NIO untuk menyemak dan memberikan hanya contoh SelectableChannel yang mempunyai data untuk dibaca, berbanding menyekat saluran paip IO, yang menggunakan antara muka yang serupa dengan InputStream dan hanya membenarkan satu bait dibaca pada satu masa.

Perbandingan Model Menyekat dan Tidak Menyekat untuk Operasi Baca/Tulis Pelayan

Dalam dunia seni bina pelayan, memilih untuk menggunakan model menyekat atau tidak menyekat untuk operasi baca dan tulis boleh menjejaskan kecekapan dan kebolehskalaan pelayan.

Model tidak menyekat adalah bertentangan dengan model menyekat, yang membolehkan proses mengendalikan berbilang permintaan serentak dengan menyilangkan panggilan I/O yang tidak menyekat.

Untuk menggambarkan perbezaan antara model ini, mari kita pertimbangkan pelayan hipotetikal yang menerima dua permintaan Dalam model penyekatan, proses mesti menunggu permintaan A diproses sepenuhnya sebelum beralih ke permintaan B. Sebaliknya, model tidak menyekat. boleh mengendalikan kedua-dua permintaan secara serentak dengan menyelangi pemprosesan permintaan A dan B.

Java NIO membolehkan satu utas untuk mengawal berbilang saluran dan menyokong I/O tanpa sekatan.

Saluran yang memautkan penimbal dan objek di hujung yang satu lagi memungkinkan pemindahan data tak segerak dua kelas, SocketChannel dan ServerSocketChannel, melaksanakan saluran Java NIO dan memungkinkan untuk menerima dan menulis data melalui sambungan TCP.

Arkitek pelayan boleh mencipta sistem yang berkesan, berskala dan boleh mengurus banyak permintaan serentak dengan memilih model I/O yang betul.

Kesimpulan

Java NIO menyediakan aplikasi rangkaian dan pengendalian fail yang berkuasa dengan sokongan yang dipertingkatkan untuk pengendalian fail dan ciri sistem fail I/O tak segerak dan tidak menyekat, pendekatan berorientasikan penimbal dan tiga komponen asas penimbal, saluran dan pemilihnya. ia sistem I/O yang unik.

Model pelayan tidak menyekat Java NIO mampu mengendalikan berbilang permintaan secara serentak dengan menggunakan paip I/O yang tidak menyekat. Tidak seperti menyekat paip I/O, model tidak menyekat hanya menyemak dan menyediakan tika SelectableChannel yang sebenarnya mempunyai data untuk dibaca, menjadikannya sistem yang lebih pantas dan cekap.

Atas ialah kandungan terperinci Pelayan tidak menyekat dalam Java NIO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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