प्रौद्योगिकी साझेदारी

जावा संजालप्रतिरूपे सम्पूर्णसाक्षरता

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

अवलोकनम्

ava स्तरस्य NIO इत्यस्य मूलभूतज्ञानस्य वर्णनं करोति, मूलभूतसमीक्षायै

1. एनआईओ अवलोकन

जावा मध्ये NIO (Non-blocking I/O अथवा New I/O) इति जावा SE 1.4 तथा तदनन्तरं संस्करणेषु प्रवर्तमानस्य input/output operation API इत्यस्य नूतनः समुच्चयः अस्ति ।

पारम्परिक IO मॉडल् इत्यस्य तुलने एतत् उच्चतरदक्षतां उत्तमसमवर्तीप्रक्रियाक्षमतां च प्रदाति । NIO इत्यस्य मुख्यविशेषता तस्य अ-अवरोधन-विशेषता अस्ति, यत् एकं थ्रेड् बहुविध-I/O-चैनेल्-प्रबन्धनं कर्तुं शक्नोति, तस्मात् उच्च-समवर्ती-परिदृश्येषु अनुप्रयोग-प्रदर्शने महतीं सुधारं करोति

जावा एनआईओ इत्यस्य उपयोगपरिदृश्यं विशेषतया तादृशानां परिस्थितीनां कृते उपयुक्तं भवति यत्र बहूनां समवर्तीसंयोजनानां संसाधनं करणीयम् उदाहरणार्थं, संजालसर्वरस्य मध्ये एकः सूत्रः प्रत्येकस्य संयोजनस्य कृते स्वतन्त्रसूत्रस्य आवंटनस्य आवश्यकतां विना सहस्राणि क्लायन्ट् संयोजनानि प्रबन्धयितुं शक्नोति .प्रणालीसंसाधनस्य उपभोगं महत्त्वपूर्णतया न्यूनीकर्तुं शक्नोति तथा च प्रसंस्करणक्षमतासु सुधारं कर्तुं शक्नोति

2. जावा मध्ये NIO इत्यस्य त्रयः प्रमुखाः घटकाः

1. चैनल्स्

चैनल् जावा एनआईओ इत्यस्मिन् दत्तांशप्रवाहस्य माध्यमम् अस्ति यत् एतत् द्विदिशायुक्तं भवति, तस्य उपयोगेन आँकडानां पठनं वा आँकडानां लेखनं वा कर्तुं शक्यते । चैनल् इत्यस्य मुख्यः लाभः अस्ति यत् ते अ-अवरोधिताः भवन्ति, यस्य अर्थः अस्ति यत् एकः सूत्रः बहुविधं चैनल् प्रबन्धयितुं शक्नोति यदा कस्मिन्चित् चैनले कोऽपि घटना न भवति तदा सूत्रं अवरुद्धं न भविष्यति, तस्य स्थाने अन्यकार्यं सम्भालितुं शक्नोति मुख्यचैनलप्रकाराः सन्ति : १.

  • FileChannel: सञ्चिकापठनलेखनक्रियाणां कृते उपयुज्यते अस्य उपयोगः बफरतः सञ्चिकायां दत्तांशं लिखितुं, अथवा सञ्चिकातः बफरमध्ये दत्तांशं पठितुं शक्यते ।
  • SocketChannel: संजालसञ्चारयोः TCP संयोजनानां कृते उपयुज्यते, तथा च आँकडानां पठनलेखनयोः उपयोगः कर्तुं शक्यते ।
  • ServerSocketChannel: पारम्परिक ServerSocket इत्यस्य सदृशं नूतनं SocketChannel संयोजनं स्वीकुर्वितुं प्रयुक्तम् ।
  • DatagramChannel: UDP संचारार्थं उपयुज्यते, यत् डाटाग्रामं प्रेषयितुं प्राप्तुं च शक्नोति ।

2. बफराः

Buffer इति NIO मध्ये data संग्रहणार्थं प्रयुक्तं वस्तु अस्ति यत् एतत् एकं byte array अस्ति यत् data लिखितुं तस्मात् data पठितुं च शक्नोति । बफरस्य विशिष्टक्षमता भवति, तस्य द्वौ महत्त्वपूर्णौ गुणौ भवतः - स्थितिः सीमा च ।

  • क्षमता: अधिकतमं तत्त्वानां संख्या यत् बफरः संग्रहीतुं शक्नोति ।
  • स्थितिः: वर्तमानकाले संचालितस्य तत्त्वस्य अनुक्रमणिका, यत् दत्तांशस्य पठने लेखने वा परिवर्तनं भवति ।
  • सीमा: पठनविधौ, अधिकतमं मूल्यं यत् पदं प्राप्तुं शक्नोति, स्थानं मूल्यं अतिक्रमितुं न शक्नोति;

बफरस्य मुख्याः प्रकाराः सन्तिByteBufferCharBufferShortBufferIntBufferLongBufferFloatBufferतथाDoubleBuffer, प्रत्येकं प्रकारः आदिमदत्तांशप्रकारस्य अनुरूपः भवति ।

3. चयनकर्तारः

चयनकर्ता NIO मध्ये एकः मल्टिप्लेक्सरः अस्ति यः एकं थ्रेड् बहुभिः चैनल् तः घटनानां निरीक्षणं कर्तुं शक्नोति, यथा पठनं, लेखनं, संयोजयितुं, घटनाः प्राप्तुं च । चयनकर्ता अनुप्रयोगं सूचयति यदा एकः चैनलः I/O कार्याणां कृते सज्जः भवति । चयनकर्तानां उपयोगेन संजाल-अनुप्रयोगानाम् समवर्ती-प्रक्रिया-क्षमतायां महती उन्नतिः भवति यतोहि प्रत्येकस्य संयोजनस्य कृते सूत्रस्य निर्माणस्य आवश्यकता नास्ति

चयनकर्तानां मुख्यविधयः सन्ति- १.

  • select(): यावत् न्यूनातिन्यूनम् एकः चैनलः I/O-सञ्चालनार्थं सज्जः न भवति तावत् अवरोधयति ।
  • selectedKeys(): सर्वेषां सज्जीकृतानां चैनलानां SelectionKey ऑब्जेक्ट्स् युक्तं Set रिटर्न् करोति ।
  • wakeup(): व्यत्ययः अवरुद्धःselect()स्थानांतरण।

SelectionKeyइदं चयनकर्तानां चैनलानां च मध्ये सम्बन्धः अस्ति

3. संजालप्रोग्रामिंग

1. I/O अवरोधनम्

इदं पारम्परिकं I/O मॉडल् अस्ति जावा मध्ये पारम्परिकं Socket तथा ​​ServerSocket APIs I/O अवरुद्ध्य आधारितम् अस्ति । अस्मिन् मोड् मध्ये यदा कश्चन थ्रेड् पठन-लेखन-क्रियाम् आरभते तदा I/O-क्रियायाः समाप्तिपर्यन्तं सूत्रं अवरुद्धं भवति । यदि पठनक्रियायाः कृते पठनीयः दत्तांशः नास्ति, अथवा लेखनक्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि सूत्रं यावत् क्रियायाः समाप्तिः न भवति तावत् प्रतीक्षते ।

गुणाः:

  • सरल प्रोग्रामिंग मॉडल: अवगन्तुं कार्यान्वयनञ्च सुलभम्।
  • संसाधनव्यापारः: प्रत्येकं संयोजनं स्वतन्त्रं सूत्रं आवश्यकं भवति, यस्य परिणामेण सूत्राणां संख्या सीमितं भवति, संसाधनस्य उच्चः उपभोगः च भवति ।
  • कार्यप्रदर्शनस्य सीमाः: उच्च-समवर्ती-परिदृश्येषु थ्रेड्-स्विचिंग्, सन्दर्भ-स्विचिंग् च महत् भवति, ते च सहजतया अटङ्कं भवितुम् अर्हति ।

2. अ-अवरोधक I/O

अ-अवरोधक I/O Java NIO (New I/O) ढाञ्चायाः भागः अस्ति, यत् थ्रेड्-इत्येतत् अवरुद्धं विना पठन-लेखन-क्रियाः आरभ्यतुं शक्नोति । यदि पठनक्रियायाः कृते पठनीयः दत्तांशः नास्ति, अथवा लेखनक्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि सूत्रं स्थगितम् न भविष्यति, अन्यकार्यं निरन्तरं कर्तुं शक्नोति

गुणाः:

  • लचीलापनम्: थ्रेड् अधिकानि संयोजनानि सम्भालितुं शक्नुवन्ति यतः ते I/O कार्याणि प्रतीक्षमाणाः अवरुद्धाः न भवन्ति ।
  • जटिलता वर्धिता: प्रोग्रामरस्य स्पष्टतया परीक्षणं करणीयम् यत् ऑपरेशनं सम्पन्नम् अस्ति वा, येन प्रोग्रामिंग् इत्यस्य कठिनता वर्धते ।
  • कार्यप्रदर्शनसुधारः: उच्च-समवर्ती-परिदृश्येषु थ्रेड्-स्विचिंग्-कारणात् उत्पन्नं ओवरहेड् महत्त्वपूर्णतया न्यूनीकर्तुं शक्यते ।

3. बहुविधीकरणम्

मल्टीप्लेक्सिंग् इति एकेन थ्रेड् मार्गेण एकस्मिन् समये बहुविधसञ्चिकावर्णकानां निरीक्षणं करणीयम्, तथा च केवलं तदा एव वर्णकस्य उपरि कार्यं कर्तुं यदा सः सज्जः भवति (प्रायः दत्तांशः पठनीयः अस्ति, अथवा लेखनबफरः लेखनीयः इति अर्थः) जावा मध्ये बहुविधीकरणं कार्यान्वितुं चयनकर्तानां उपयोगः भवति ।

गुणाः:

  • उच्च समवर्ती: एकः सूत्रः सहस्राणि संयोजनानि सम्भालितुं शक्नोति, येन सर्वरस्य थ्रूपुट् इत्यस्य महती उन्नतिः भवति ।
  • कुशल: केवलं यदा I/O-सञ्चालनं सज्जं भवति तदा एव अनावश्यक-सूत्र-स्विचिंग्-परिहाराय धागः जागरितः भविष्यति ।
  • संसाधनस्य रक्षणम्: I/O अवरोधनस्य तुलने मल्टिप्लेक्सिंग् मॉडल् इत्यस्य अन्तर्गताः सर्वराः सिस्टम् संसाधनानाम् अधिकतया उपयोगं कर्तुं शक्नुवन्ति ।

सूचना:

व्यावहारिक-अनुप्रयोगेषु, अ-अवरोधक-I/O प्रायः बहुलीकरणेन सह उपयुज्यते । उदाहरणार्थं, सर्वरः बहुविध SocketChannel निरीक्षितुं Selector इत्यस्य उपयोगं कर्तुं शक्नोति यदा SocketChannel इत्यस्य दत्तांशः भवति यत् पठितुं वा लिखितुं वा शक्यते, तदा Selector सर्वरं सूचयिष्यति, सर्वरः च एतत् विशिष्टं SocketChannel अ-अवरुद्धरूपेण संसाधयिष्यति

4.NIO VS BIO

४.१ धारा बनाम चैनल

जावा मध्ये Stream तथा Channel इति द्वौ भिन्नौ मार्गौ सन्ति यत् ते क्रमशः जावा इत्यस्य मानक IO पुस्तकालयस्य NIO पुस्तकालयस्य च सन्ति । अत्र द्वयोः अवधारणायोः विस्तृतः तुलना अस्ति ।

धारा

Stream जावा इत्यस्य मानक IO (blocking IO) मॉडलस्य भागः अस्ति, यत् क्रमेण आँकडानां पठनस्य लेखनस्य च मार्गं प्रदाति । Stream इति द्वयोः प्रकारयोः विभक्तम् अस्ति : InputStream तथा OutputStream, येषां उपयोगः क्रमशः आँकडानां पठनलेखनयोः कृते भवति ।एते धाराः बाइट् धाराः (यथा...InputStream, OutputStream) वर्णधारा वा (यथाReader, Writer)。

गुणाः:

  • बाधक: पूर्वनिर्धारितरूपेण, Stream क्रियाः अवरुद्धाः सन्ति, अर्थात् यदि पठनक्रियायां पठितुं कोऽपि दत्तांशः नास्ति, अथवा लेखनक्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि यावत् कार्यं न समाप्तं भवति तावत् आह्वानसूत्रं अवरुद्धं भविष्यति
  • एकदिशात्वम्: प्रत्येकस्य Stream इत्यस्य दिशा भवति, केवलं पठनीयं वा केवलं लिखितुं वा।
  • स्वचालितं बन्दीकरणं भवति: Stream इत्यस्य उपयोगानन्तरं प्रायः भवद्भिः तत् आह्वयितुं आवश्यकम्close() संसाधनं मुक्तुं विधिः।जावा 7 तः आरभ्य, try-with-resources कथनं स्वयमेव कार्यान्वयनम् बन्दं कर्तुं शक्नोतिAutoCloseableस्ट्रीम सहितं अन्तरफलकसंसाधनम् ।

चैनल

चैनल् Java NIO (New IO) मॉडलस्य भागः अस्ति, यत् Stream इत्यस्मात् उच्चस्तरस्य अमूर्ततां प्रदाति, येन आँकडानां अधिककुशलं संसाधनं भवति । चैनल्स् द्विदिशायुक्ताः भवितुम् अर्हन्ति, अर्थात् तेषां उपयोगेन दत्तांशपठनलेखनयोः उपयोगः कर्तुं शक्यते ।मुख्य Channel प्रकारेषु अन्तर्भवतिFileChannelSocketChannelServerSocketChannelतथाDatagramChannel

गुणाः:

  • अनिरोधः :Channel इत्यस्य विन्यस्तं ब्लॉकिंग् अथवा अब्लॉकिंग् मोड् इत्यत्र कर्तुं शक्यते । अ-अवरोध-विधाने यदि पठन-क्रियायां पठितुं दत्तांशः नास्ति, अथवा लेखन-क्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि सूत्रं अवरुद्ध्य स्थाने तत्क्षणं प्रत्यागमिष्यति
  • बफर संचालन:Channel operations सर्वदा buffer (Buffer) मार्गेण क्रियन्ते Data channel तः buffer मध्ये पठ्यते अथवा buffer तः channel मध्ये लिख्यते ।
  • बहुविधीकरणम्: बहुलीकरणं प्राप्तुं चयनकर्ता सह मिलित्वा चैनलस्य उपयोगः कर्तुं शक्यते, येन एकः थ्रेड् बहुविधचैनलस्य I/O-सञ्चालनस्य निरीक्षणं कर्तुं शक्नोति तथा च समवर्ती-प्रक्रिया-क्षमतासु सुधारं कर्तुं शक्नोति

सारांशं कुरुत

  • प्रयोज्य दृश्य: Stream लघुदत्तांशसमूहानां अथवा सरलसञ्चिकासञ्चालनानां संसाधनार्थं अधिकं उपयुक्तं भवति, यदा तु Channel बृहत्मात्रायां आँकडानां संसाधनार्थं अधिकं उपयुक्तं भवति, विशेषतः संजालसञ्चारस्य बृहत्सञ्चिकासञ्चालनस्य च कृते, यतः एतत् उच्चतरं प्रदर्शनं उत्तमं समवर्तीक्षमतां च प्रदाति
  • प्रोग्रामिंग जटिलता: Stream इत्यस्य API तुल्यकालिकरूपेण सरलं सुलभं च भवति यदा Channel तथा NIO इत्यस्य API अधिकं जटिलं भवति, परन्तु अधिकशक्तिशालिनः कार्याणि उच्चतरदक्षतां च प्रदाति।
  • संसाधन प्रबन्धन: भवेत् तत् Stream अथवा Channel, संसाधनानाम् समुचितं प्रबन्धनं करणीयम् तथा च संसाधनस्य लीकं परिहरितुं यदा आवश्यकता नास्ति तदा ते बन्दाः भवन्ति इति सुनिश्चितं कर्तव्यम्।

4.2.IO मॉडल्

जावा-मध्ये I/O-सञ्चालन-प्रतिरूपाणां वर्गीकरणं समकालिक/अतुल्यकालिकस्य तथा अवरोधन/अवरोधनस्य द्वयोः आयामयोः आधारेण कर्तुं शक्यते ।

4.2.1 समकालिक अवरोधन I/O

परिभाषा : समन्वयात्मकं अवरोधनं I/O सर्वाधिकं पारम्परिकं I/O मॉडलं भवति यदा कश्चन थ्रेड् I/O ऑपरेशनं (यथा पठनं वा लेखनं वा) आह्वयति तदा यावत् ऑपरेशनं न समाप्तं भवति तावत् थ्रेड् अवरुद्धः भविष्यति । यावत् क्रिया न समाप्तं भवति तावत् सूत्रं अन्यकार्यं कर्तुं न शक्नोति इति भावः ।

गुणाः

  • सरलं सुलभं च, कोडतर्कः स्पष्टः अस्ति ।
  • प्रत्येकं I/O-सञ्चालनस्य कृते अनन्य-सूत्रस्य आवश्यकता भवति, यत् उच्च-समवर्ती-परिदृश्यानां कृते उपयुक्तं नास्ति तथा च थ्रेड्-संसाधन-क्षयस्य कारणं भवितुम् अर्हति ।
  • सामान्यतः इ.सInputStreamOutputStreamSocketतथाServerSocketदृश्य।

उदाहरण:

पारम्परिकं प्रयोगं कुर्वन्तुInputStreamतथाOutputStreamसञ्चिकाः पठितुं लिखितुं च : १.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class SyncBlockingIOExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt");
             FileOutputStream fos = new FileOutputStream("output.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4.2.2 समकालिक अ-अवरोधक I/O

परिभाषा : समकालिक-अ-अवरुद्ध-I/O इत्यस्मिन्, I/O-क्रियायाः आह्वानानन्तरं थ्रेड् अवरुद्धः न भविष्यति । यदि तत्क्षणं कार्यं सम्पन्नं कर्तुं न शक्यते तर्हि विधिः तत्क्षणमेव प्रत्यागमिष्यति, प्रायः विशेषं मूल्यं (यथा -1 अथवा 0) प्रत्यागमिष्यति अथवा अपवादं क्षिपति यत् कार्यं न सम्पन्नम् इति सूचयति

गुणाः

  • यावत् ऑपरेशनं न सम्पन्नं भवति तावत् यावत् ऑपरेशनस्य स्थितिः पोल् करणीयम्।
  • उच्चतरः थ्रेड्-उपयोगः यतः थ्रेड्-इत्येतत् I/O प्रतीक्षमाणाः अन्यकार्यं कर्तुं शक्नुवन्ति ।
  • कार्यान्वयनम् अधिकं जटिलं भवति, मतदानं, स्थितिपरीक्षां च नियन्त्रयितुं आवश्यकम् अस्ति ।
  • जावा एनआईओ इत्यस्य आधारेणChannelsतथाBuffers, आह्वानेनconfigureBlocking(false)चैनल् अ-अवरोध-विधाने सेट् कुर्वन्तु ।

उदाहरण:

NIO इत्यस्य उपयोगेनFileChannelअनिरोधकपठनलेखनयोः कृते : १.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;

public class SyncNonBlockingIOExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt");
             FileOutputStream fos = new FileOutputStream("output.txt");
             FileChannel inChannel = fis.getChannel();
             FileChannel outChannel = fos.getChannel()) {
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            inChannel.configureBlocking(false);
            while (inChannel.read(buffer) > 0) {
                buffer.flip();
                outChannel.write(buffer);
                buffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4.2.3 समकालिक बहुलीकरण I/O

परिभाषा: समन्वयात्मकः बहुविधः I/O मॉडलस्य उपयोगःSelector(चयनकः) बहुविधं निरीक्षणं कर्तुंChannel घटना।यदा सूत्रम् आह्वयतिSelector.select(), यावत् न्यूनातिन्यूनम् एकः न भवति तावत् अवरुद्धं करिष्यतिChannelघटनाः (पठनीयः, लेखनीयः, संयोजनानुरोधः इत्यादयः) भवन्ति ।

गुणाः

  • एकं सूत्रं बहुविधं प्रबन्धयितुं शक्नोतिChannel, समवर्तीत्वं सुधरति ।
  • उत्तीर्णःSelectorतथाSelectionKeyतन्त्रं यत् बहूनां समवर्तीसंयोजनानां कुशलतापूर्वकं सम्भालितुं शक्नोति।
  • जालसर्वरपरिदृश्यानां कृते उपयुक्तः, यथा जालसर्वरः, गपशपसर्वरः च ।
  • जावा NIO framework इत्यस्य आधारेण ।

उदाहरण:

NIO इत्यस्य उपयोगेनFileChannelअनिरोधकपठनलेखनयोः कृते : १.

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Set;

public class SyncMultiplexingIOExample {
    public static void main(String[] args) throws IOException {
        try (Selector selector = Selector.open();
             ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) {
            serverSocketChannel.socket().bind(new InetSocketAddress(8080));
            serverSocketChannel.configureBlocking(false);
            serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
            while (true) {
                if (selector.select() > 0) {
                    Set<SelectionKey> keys = selector.selectedKeys();
                    for (SelectionKey key : keys) {
                        if (key.isAcceptable()) {
                            ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
                            SocketChannel clientChannel = ssc.accept();
                            clientChannel.configureBlocking(false);
                            clientChannel.register(selector, SelectionKey.OP_READ);
                        }
                    }
                    keys.clear();
                }
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

4.2.4 अतुल्यकालिकः अ-अवरोधकः I/O

परिभाषा : अतुल्यकालिक-अ-अवरोधक-I/O-प्रतिरूपे, I/O-सञ्चालनस्य आरम्भस्य अनन्तरं तत्क्षणमेव धागः क्रियायाः समाप्तेः प्रतीक्षां विना प्रत्यागच्छति । यदा कार्यं सम्पन्नं भवति तदा थ्रेड् अतुल्यकालिकरूपेण कॉलबैक् फंक्शन् अथवा इवेण्ट् सूचनाद्वारा सूचितं भविष्यति ।

गुणाः

  • अत्यन्तं कुशलं I/O मॉडल्, थ्रेड् सर्वथा अवरुद्धं न भवति तथा च अन्यकार्यं तत्क्षणमेव कर्तुं शक्नोति ।
  • उत्तीर्णःAsynchronousChannelअन्तरफलकं तस्य उपवर्गस्य कार्यान्वयनम्, यथाAsynchronousFileChannelतथाAsynchronousSocketChannel
  • उच्च-समवर्ती-उच्च-प्रदर्शन-परिदृश्यानां कृते उपयुक्तः, यथा बृहत्-आँकडा-संसाधनं, उच्च-भार-जाल-सर्वर् च ।
  • जावा 7 इत्यनेन अतुल्यकालिकं गैर-अवरोधकं I/O मॉडलं प्रवर्तयितम् ।

उदाहरण:

NIO इत्यस्य उपयोगेनAsynchronousFileChannelअतुल्यकालिकसञ्चिकापठनं लेखनं च कुर्वन्तु:

import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.ByteBuffer;
import java.util.concurrent.CountDownLatch;

public class AsyncNonBlockingIOExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        AsynchronousFileChannel inChannel = AsynchronousFileChannel.open(Paths.get("input.txt"), StandardOpenOption.READ);
        AsynchronousFileChannel outChannel = AsynchronousFileChannel.open(Paths.get("output.txt"), StandardOpenOption.WRITE);
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        CountDownLatch latch = new CountDownLatch(1);
        inChannel.read(buffer, 0, buffer, 0, (channel, result) -> {
            buffer.flip();
            outChannel.write(buffer, 0, buffer, 0, null);
            latch.countDown();
        });
        latch.await();
        inChannel.close();
        outChannel.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

नोटः- अतुल्यकालिकप्रतिरूपस्य कृते अन्तर्निहितप्रचालनतन्त्रात् (Kernel) समर्थनस्य आवश्यकता भवति ।

  • विण्डोज-प्रणाल्याः IOCP-माध्यमेन सत्यं अतुल्यकालिकं IO कार्यान्वितं भवति
  • Linux प्रणाल्यां अतुल्यकालिकं IO संस्करणं 2.6 मध्ये प्रवर्तितम् आसीत्, परन्तु तस्य अन्तर्निहितं कार्यान्वयनम् अद्यापि अतुल्यकालिकं IO अनुकरणार्थं बहुलीकरणस्य उपयोगं करोति, तथा च कार्यक्षमतायाः लाभः नास्ति

4.2.5 अतुल्यकालिक अवरोधन I/O

परिभाषा : सिद्धान्ततः एतत् प्रतिरूपं नास्ति, यतः "अतुल्यकालिक" इत्यस्य अर्थः अस्ति यत् कार्यं पृष्ठभूमितः क्रियते, सूत्रं च अवरुद्धं न भवति । अतः असमकालिक अवरोधः I/O एकः विरोधाभासपूर्णः अवधारणा अस्ति तथा च व्यवहारे न दृश्यते ।

४.२.६ सारांशः

समुचितं I/O मॉडलं चयनं कार्यप्रदर्शनस्य संसाधनप्रबन्धनस्य च कृते महत्त्वपूर्णम् अस्ति । उच्च-समवर्ती-परिदृश्येषु, समकालिक-अ-अवरोधक-I/O अथवा समकालिक-मल्टिप्लेक्स-कृत-I/O-प्रतिरूपाः सामान्याः विकल्पाः सन्ति येषु परिदृश्येषु चरम-प्रदर्शनस्य प्रतिक्रिया-वेगस्य च आवश्यकता भवति, अतुल्यकालिकं अ-अवरोधक-I/O-प्रतिरूपं प्रथमः विकल्पः भवति

४.३ शून्यप्रतिलिपिः

शून्य-प्रतिलिपि अवधारणा

शून्य-प्रतिलिपि-प्रौद्योगिक्याः अर्थः अस्ति यत् एकस्मात् स्थानात् अन्यस्मिन् स्थाने दत्तांशसञ्चारस्य प्रक्रियायां उपयोक्तृस्थानस्य कर्नेल्-स्थानस्य च मध्ये दत्तांशस्य प्रतिलिपिकरणस्य आवश्यकता नास्ति, अथवा न्यूनातिन्यूनं तादृशप्रतिलिपानां संख्यां न्यूनीकरोति, तस्मात् प्रणाल्याः कार्यक्षमतायां सुधारः भवति पारम्परिक I/O कार्येषु यदा दत्तांशः संजालतः अथवा डिस्कतः पठ्यते तदा प्रथमं कर्नेल् स्पेस इत्यत्र बफर इत्यत्र प्रतिलिपितः भवति, ततः कर्नेल् स्पेस तः उपयोक्तृस्थाने बफर इत्यत्र प्रतिलिपितः भवति तद्विपरीतम् शून्यप्रतिलिपौ प्रत्यक्षतया कर्नेल्-स्थाने दत्तांशं संसाधितुं शक्यते, अथवा कर्नेल्-स्थानात् प्रत्यक्षतया संजाल-यन्त्रे स्थानान्तरितुं शक्यते, अतः CPU-प्रतिलिपि-सञ्चालनं न्यूनीकरोति, प्रणाली-उपरिभारः न्यूनीकरोति, दत्तांश-सञ्चारस्य कार्यक्षमतायां च सुधारः भवति

शून्यप्रतिलिपेः स्रोतः

शून्यप्रतिलिपिस्य अवधारणा प्रथमवारं प्रचालनप्रणालीनिर्माणे प्रादुर्भूतवती, यस्य उद्देश्यं पारम्परिक I/O संचालनेषु आँकडाप्रतिलिपिकरणेन उत्पद्यमानस्य कार्यक्षमतायाः अटङ्कस्य समाधानं भवति स्म प्रारम्भिकसङ्गणकतन्त्रेषु सर्वेषु I/O-कार्यक्रमेषु उपयोक्तृस्थाने, कर्नेल्-स्थाने च बहुविधदत्तांशप्रतिकृतीनां आवश्यकता भवति स्म ।

प्रमुख तकनीकी बिन्दव

  • प्रत्यक्ष I/O: सञ्चिकातन्त्रस्य संग्रहणतन्त्रं त्यक्त्वा अनुप्रयोगानाम् प्रत्यक्षतया डिस्कयन्त्राणि अभिगन्तुं शक्नोति ।
  • स्मृति मानचित्रण (MMAP) 1.1.: सञ्चिकाः स्मृतौ मैप् कुर्वन्तु येन सञ्चिकादत्तांशः स्मृतिवत् अभिगन्तुं शक्यते, प्रतिलिपिकरणं न्यूनीकरोति ।
  • सञ्चिका प्रेषयतु: Linux system call यत् एकस्मात् सञ्चिकावर्णकात् अन्यस्मिन् प्रत्यक्षतया आँकडानां स्थानान्तरणं कर्तुं शक्नोति, मध्यवर्ती प्रतिलिपिं परिहरति ।
  • DMA (प्रत्यक्ष स्मृति अभिगम) .: हार्डवेयर-स्तरीय-प्रौद्योगिकी यत् CPU-सम्बद्धतां विना उपकरणस्य स्मृतेः च मध्ये प्रत्यक्षतया आँकडानां स्थानान्तरणं कर्तुं शक्नोति ।

जावादेशे कार्यान्वयनम् : १.

जावा NIO (New I/O) ढाञ्चायाः माध्यमेन शून्य-प्रति-प्रौद्योगिकी समर्थयति । एनआईओ परिचयं कृतवान्FileChannelतथाSocketChannel तथा अन्यवर्गाः, ये अधिककुशलाः I/O कार्याणि प्रदास्यन्ति । विशेषतः, २.FileChannel.transferTo()तथाFileChannel.transferFrom()विधिः सञ्चिकाचैनलतः प्रत्यक्षतया सॉकेट् चैनले अथवा तद्विपरीतम् आँकडान् बफरमध्ये लोड् न कृत्वा दत्तांशं स्थानान्तरयितुं शक्नुवन्ति, अतः शून्यप्रतिलिपिः प्राप्तुं शक्यते ।

यथा, भवद्भिः बृहत् सञ्चिकायाः ​​सामग्रीं जालपुटे प्रेषयितुं आवश्यकम् इति कल्पयतु पारम्परिकः उपायः प्रथमं सञ्चिकायाः ​​सामग्रीं बफरमध्ये पठित्वा ततः बफरस्य सामग्रीं जालपुटे लिखितव्यम् अस्मिन् प्रतिलिपिक्रियाद्वयं भवति : एकं डिस्कतः बफरं प्रति अपरं बफरतः संजालपर्यन्तं ।उपयोगं कुर्वन्transferTo()एतस्य पद्धतेः उपयोगे मध्यवर्तीबफरस्य आवश्यकतां विना प्रत्यक्षतया डिस्कतः जालपुटे दत्तांशं स्थानान्तरयितुं शक्यते, येन प्रतिलिपानां संख्या न्यूनीभवति, शून्यप्रतिलिपिः च प्राप्यते

ByteBuffer इत्यस्य उपयोगेन एकं उदाहरणम् :

ByteBufferइत्यादिBufferवर्गः (यथाCharBufferShortBufferइत्यादि) बफरं प्रदाति यत् उपयोक्तृस्थानस्य कर्नेल् स्थानस्य च मध्ये प्रत्यक्षतया प्रतिलिपिं न सम्मिलितं विना पूरयितुं रिक्तं वा कर्तुं शक्यते ।ByteBufferशून्य-प्रति-प्रौद्योगिक्यां प्रत्यक्षतया परोक्षतया वा उपयोक्तुं शक्यते : १.

  1. प्रत्यक्ष बफरByteBuffer.allocateDirect(size)निर्मितम्ByteBuffer जावा-राशिं त्यक्त्वा प्रत्यक्षतया भौतिकस्मृतौ उदाहरणानि मैप् भवन्ति ।यदा तादृशस्य बफरस्य तुलना भवतिFileChannelवाSocketChannel एकत्र उपयुज्यमानं जावा-राशिद्वारा अतिरिक्तप्रतिकृतीनां आवश्यकतां विना भौतिकस्मृति-हार्डवेयर-यन्त्राणां मध्ये प्रत्यक्षतया दत्तांशं स्थानान्तरयितुं शक्यते । एतेन केषुचित् मञ्चेषु सत्या शून्यप्रतिलिपिः सक्षमा भवति ।
  2. उपयुञ्जताम्‌FileChannelइत्यस्यtransferTo()तथाtransferFrom(): एतानि पद्धतयः प्रत्यक्षतया दत्तांशं संग्रहीतुं शक्नुवन्तिFileChannelतथाSocketChannelमध्ये संक्रमितम्ByteBuffer मध्यस्थत्वेन । अस्य अर्थः अस्ति यत् उपयोक्तृस्थानस्य कर्नलस्थानस्य च मध्ये प्रतिलिपिं न कृत्वा प्रत्यक्षतया डिस्कतः संजाले अथवा तद्विपरीतम् दत्तांशं स्थानान्तरयितुं शक्यते ।
  3. उपयुञ्जताम्‌ByteBufferइत्यस्यwrap()प्रक्रियाwrap()method इत्यनेन विद्यमानं बाइट्-सरण्यं वा अन्यं बफरं वा a मध्ये वेष्टयितुं शक्यतेByteBuffer , अतः नूतनबफरमध्ये दत्तांशस्य प्रतिलिपिं कर्तुं आवश्यकता नास्ति । एतत् दत्तांशस्य अनावश्यकप्रतिलिपिं परिहरितुं उपयोगी भवति ।
  4. उपयुञ्जताम्‌ByteBufferइत्यस्यslice()प्रक्रियाslice() method इत्यनेन अन्तर्निहितदत्तांशस्य प्रतिलिपिं विना बफरस्य दृश्यं निर्माति ।बृहत् इति भावःByteBufferदत्तांशस्य प्रतिलिपिं विना बहुषु लघुबफरेषु विभक्तम् ।

FileChannel इत्यनेन सह ByteBuffer इत्यस्य उपयोगं कुर्वन्तु:

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class ZeroCopyExample {
    public static void main(String[] args) {
        Path path = Path.of("example.txt");
        try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ)) {
            ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
            long transferred = fileChannel.transferTo(0, fileChannel.size(), System.out);
            System.out.println("Transferred bytes: " + transferred);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

सूचना:

अस्माभिः ज्ञातव्यं यत् वस्तुतः अत्र उल्लिखिता शून्यप्रतिलिपिः केवलं अस्माकं अनुप्रयोगाय एव अस्ति, यस्य उपयोक्तृस्तरीयप्रतिलिपिः नास्ति । परन्तु उपयोक्तृस्तरस्य अपि प्रतिलिपिक्रियाः सर्वथा न भवितुं शक्यन्ते, परन्तु यथासम्भवं प्रतिलिपिनां न्यूनीकरणं कर्तुं शक्यते अतः वयं अवगन्तुं शक्नुमः यत् शून्यप्रतिलिपिः इति पदं वस्तुतः दत्तांशप्रतिलिपिसङ्ख्यां न्यूनीकर्तुं प्रौद्योगिक्याः उल्लेखं करोति । न च सत्या प्रतिलिपिक्रिया नास्ति इति भावः ।