public class AsynchronousBlockReader extends AsynchronousFileIOChannel<org.apache.flink.core.memory.MemorySegment,org.apache.flink.runtime.io.disk.iomanager.ReadRequest> implements BlockChannelReader<org.apache.flink.core.memory.MemorySegment>
MemorySegment in an asynchronous fashion. That is, a read request
is not processed by the thread that issues it, but by an asynchronous reader thread. Once the
read request is done, the asynchronous reader adds the full MemorySegment to a return
queue where it can be popped by the worker thread, once it needs the data. The return queue
is in this case a LinkedBlockingQueue, such that the working thread
blocks until the request has been served, if the request is still pending when the it requires
the data.
Typical pre-fetching reads are done by issuing the read requests early and popping the return queue once the data is actually needed.
The reader has no notion whether the size of the memory segments is actually the size of the blocks on disk, or even whether the file was written in blocks of the same size, or in blocks at all. Ensuring that the writing and reading is consistent with each other (same blocks sizes) is up to the programmer.
FileIOChannel.Enumerator, FileIOChannel.IDclosed, closeLock, exception, requestQueue, requestsNotReturned, resultHandlerfileChannel, id, LOG| 限定符 | 构造器和说明 |
|---|---|
protected |
AsynchronousBlockReader(FileIOChannel.ID channelID,
RequestQueue<org.apache.flink.runtime.io.disk.iomanager.ReadRequest> requestQueue,
LinkedBlockingQueue<org.apache.flink.core.memory.MemorySegment> returnSegments)
Creates a new block channel reader for the given channel.
|
| 限定符和类型 | 方法和说明 |
|---|---|
org.apache.flink.core.memory.MemorySegment |
getNextReturnedBlock()
Gets the next memory segment that has been filled with data by the reader.
|
LinkedBlockingQueue<org.apache.flink.core.memory.MemorySegment> |
getReturnQueue()
Gets the queue in which the full memory segments are queued after the asynchronous read is
complete.
|
void |
readBlock(org.apache.flink.core.memory.MemorySegment segment)
Issues a read request, which will asynchronously fill the given segment with the next block
in the underlying file channel.
|
void |
seekToPosition(long position) |
addRequest, checkErroneous, close, closeAndDelete, handleProcessedBuffer, isClosed, registerAllRequestsProcessedListenerdeleteChannel, getChannelID, getNioFileChannel, getSizeclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitclose, closeAndDelete, deleteChannel, getChannelID, getNioFileChannel, getSize, isClosedprotected AsynchronousBlockReader(FileIOChannel.ID channelID, RequestQueue<org.apache.flink.runtime.io.disk.iomanager.ReadRequest> requestQueue, LinkedBlockingQueue<org.apache.flink.core.memory.MemorySegment> returnSegments) throws IOException
channelID - The ID of the channel to read.requestQueue - The request queue of the asynchronous reader thread, to which the I/O
requests are added.returnSegments - The return queue, to which the full Memory Segments are added.IOException - Thrown, if the underlying file channel could not be opened.public void readBlock(org.apache.flink.core.memory.MemorySegment segment)
throws IOException
readBlock 在接口中 BlockChannelReader<org.apache.flink.core.memory.MemorySegment>segment - The segment to read the block into.IOException - Thrown, when the reader encounters an I/O error. Due to the asynchronous
nature of the reader, the exception thrown here may have been caused by an earlier read
request.public void seekToPosition(long position)
throws IOException
seekToPosition 在接口中 BlockChannelReader<org.apache.flink.core.memory.MemorySegment>IOExceptionpublic org.apache.flink.core.memory.MemorySegment getNextReturnedBlock()
throws IOException
WARNING: If this method is invoked without any segment ever returning (for example,
because the readBlock(MemorySegment) method has not been invoked appropriately), the
method may block forever.
getNextReturnedBlock 在接口中 BlockChannelReader<org.apache.flink.core.memory.MemorySegment>IOException - Thrown, if an I/O error occurs in the reader while waiting for the
request to return.public LinkedBlockingQueue<org.apache.flink.core.memory.MemorySegment> getReturnQueue()
getReturnQueue 在接口中 BlockChannelReader<org.apache.flink.core.memory.MemorySegment>Copyright © 2014–2023 The Apache Software Foundation. All rights reserved.