, 다음과 같이 데이터가 이용 가능한 채널 차단 스레드, 파이썬비 - 프로그래밍 모델을 비 차단 IO 프로그래밍 모델에서
, 자바
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 프로그래밍 모델은 또 다른 CPU 바인딩 작업을 수행하는 무한 루프없이 함께/NIO 을 수행 할 스레드를 수 있습니까 그 동안 동일한 스레드에서?
예. 그러나 정말로 좋은 생각은 아닙니다. 이러한 작업에 전용 스레드가 있어야합니다. –
@ xiaofeng.li 예, 당신은 nio를 수행 할 수있는 동일한 스레드를 의미하며 다른 작업의 CPU 바인딩 작업을 수행 할 수 있습니까? 몇 가지 코드를 공유 할 수 있습니까? 이러한 작업에 전용 스레드가 있다는 것을 알고 있습니다. – overexchange
'비 차단 IO 프로그래밍 모델에서 한 채널에서 차단 된 스레드'는 이미 모순이 있습니다. – EJP