Non blocking IO - Programming model

2024/9/20 13:46:14

In non blocking IO programming model, a thread blocked on data available channels, as shown below,

in python,

while True:readers, _, _ = select.select([sys.stdin, sock], [], []) # blocked select()for reader in readers:if reader is sock:print(sock.recv(1000).decode('utf-8'))else:msg = sys.stdin.readline()sock.send(msg.encode('utf-8'))

in java,

     public void run() {while(true){try{executeCycle();} catch(IOException e){e.printStackTrace();}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public void executeCycle() throws IOException {takeNewSockets();readFromSockets();writeToSockets();}

In Non-blocking IO programming model, execution flow generally follows the pattern of infinite-loop with the main(only) responsibility to find the data available channels(ready) and perform IO with the available channel.


In a scenario, where all channels are busy(for a duration), Does non-blocking IO programming model allow a thread that perform nio with/without infinite loop also to perform another CPU-bound task in same thread, for a meantime?

Answer

These APIs usually allow you to specify a timeout for the selection step. That is, the amount of time to wait for any of the channels to be ready, returning an empty set if no channel became ready in the timeout. You can also do a non-block selection that returns immediately.

in python:

while True:readers, _, _ = select.select([sys.stdin, sock], [], [], 0) # non-block select# readers could be an empty listif readers:for reader in readers:if reader is sock:print(sock.recv(1000).decode('utf-8'))else:msg = sys.stdin.readline()sock.send(msg.encode('utf-8'))else:some_other_operations() # but only when no channel is ready

Java's Selector class has similar methods like selectNow() and select(long timeout) that you can use.

https://en.xdnf.cn/q/119320.html

Related Q&A

How to globally change xticks label relplot in Seaborn

I am facing an issue to globally changed the x-tick label for plot render using the relplot The idea was to change the int to string x-tick label for both plot. The desired label is [a,b,c,d] However, …

How to solve MatplotlibDeprecationWarning: scipy.stats.norm.pdf warning?

I am using matplotlib in my Python code. I got following warning: xxx.py:88: MatplotlibDeprecationWarning: scipy.stats.norm.pdfy = 100 * mlab.normpdf(bin_middles, mu, sigma)*bin_width I was wondering…

time data 42:53.700 does not match format %H:%M:%S.%f (match)

I am trying to convert a column in string format to DateTime format, However, I am getting the following error, could somebody please help? The error:time data 42:53.700 does not match format %H:%M:%S…

How can I import .py file? [duplicate]

This question already has answers here:Adding a directory to sys.path with pathlib(4 answers)Closed last year.Below is my code: from pathlib import Path import os import sys sys.path.insert(0, os.path.…

python: convenient way to create list of strings of repeated elements

How can I create a list like this:["a","a","a",... (repeating "a" a hundred times") "b","b","b",(repeating "b" a hun…

An accurate python sleep function

Ive tried time.sleep(), but its accuracy is total garbage. Consider this loop, for instance:for i in range(10000000):print(i)sleep(.334)Watch the numbers it prints. If its anything like my computer, it…

How to map python dictionary key values to each other?

Suppose we have two dictionaries as below: dict_a_to_b = {2:4, 6:9, 9:3} dict_a_to_c = {2: 0.1, 6:0.2, 9: 0.8}How to map these two dictionaries to make dict_c_to_b in python? dict_c_to_b = {0.1:4, 0.2…

Installing Keyrock on Fiware in my Virtual Machine

I want install keyrock and I follow these steps, but in the step three, when I write in the console:sudo python tools/install_venv.pyConsole shows me the next fail:Could you help me, please?

Cartopy error when attempting to plot rivers

When attempting to use Cartopy to plot rivers, Im getting a URL error. Im not even sure the rivers feature will plot what I want...Im attempting to get the Galveston Ship Channel to show on my map. Her…

Have the address of the client in python

My request is : I have my web pages created in python (wherein there is html code), each pages has a button to go to the next page. Is it possible to get the address of the client when we submit an htm…