、以下に示すように、データの利用可能なチャネル上でブロックされたスレッド、Pythonで非 - プログラミング・モデルを非ブロッキングIOプログラミングモデルにおいて
、Javaで
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'))
、
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();
}
ノンブロッキングIOプログラミングモデルでは、実行フローは通常、メイン(唯一の)利用可能なチャネル(準備完了)を見つけ、使用可能なチャネルでIOを実行する責任があります。すべてのチャネルが(持続時間)ビジーであるシナリオでは、
、非ブロッキングIOプログラミングモデルはまた、無限ループずに/とNIO を実行するスレッドが別のCPUバウンドのタスクを実行することができませんその間、同じスレッドで?
はい。しかし、実際には良い考えではありません。これらの操作には専用スレッドが必要です。 –
@ xiaofeng.liはい、nioを実行できる同じスレッドを意味し、他のタスクのCPUバインド操作も実行できますか?いくつかのコードを共有できますか?これらの操作に専用のスレッドを持たせることは理解されています – overexchange
'非ブロック化IOプログラミングモデルでは、1つのチャネルでブロックされたスレッド'はすでに矛盾しています。 – EJP