The following blocking operations are fiber friendly in the current prototype; these methods do not pin the carrier thread when the operation blocks.
API | Methods | Notes |
---|---|---|
java.net.Socket | connect, read, write | |
java.net.ServerSocket | accept | |
java.nio.channels.SocketChannel | connect, read, write | connect, read, and write on the socket adaptor obtained via SocketChannel::socket also okay |
java.nio.channels.ServerSocketChannel | accept | accept on the socket adaptor obtained via ServerSocketChannel::socket also okay |
java.nio.channels.DatagramChannel | read, receive | write and send do not block |
java.nio.channels.Pipe.SourceChannel | read | |
java.nio.channels.Pipe.SinkChannel | write |
The following blocking operations are not currently fiber friendly; these methods pin the carrier thread when the operation blocks.
API | Methods | Notes |
---|---|---|
java.net.DatagramSocket | receive | Need to investigate if receive can be done without synchronizing on the DatagramPacket (unspecified but long standing behavior) |
java.net.InetAddress | getByName, getAllByName, .. | These methods block in NSS/equivalent and are invoked using a ManagedBlocker to allow the number of carrier threads to increase when fibers are blocked in these lookup mechanism. Alternative options being explored are using a separate thread pool for lookups or dusting off the JNDI DNS provider. |
java.nio.channels.Selector | select | Selection operations are specified to synchronize on the selector and the selected-key set. May not be a concern as code using fibers should not need to use non-blocking I/O and Selectors. |