Java NIOSelector LinuxWindows2)Selectorwakeup()select()
1)SunJVMSelector
WindowsSunJavaSelector.open()loopbackTCPLinuxSelectorpipeSelector.wakeup()select()TCP
TCPWindowsWindowsJavaSelectorloopbackTCP
GDBJavaJavaGNUgijgcjJavaJava
GNUJavaSunJVMGNUJava/LinuxUnix System VWindowsGNUgijSelector.open()Selector.wakeup()
SocketRunnablerun()sSelector
//生成一个侦听端
ServerSocketChannel ssc = ServerSocketChannel.open();
//将侦听端设为异步方式
ssc.configureBlocking(false);
//生成一个信号监视器
s = Selector.open();
//侦听端绑定到一个端口
ssc.socket().bind(new InetSocketAddress(port));
//设置侦听端所选的异步信号OP_ACCEPT
ssc.register(s,SelectionKey.OP_ACCEPT);
System.out.println("echo server has been set up ......");
while(true){
int n = s.select();
if (n == 0) { //没有指定的I/O事件发生
continue;
}
Iterator it = s.selectedKeys().iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey) it.next();
if (key.isAcceptable()) { //侦听端信号触发
…… …… ……
…… …… ……
}
if (key.isReadable()) { //某socket可读信号
…… …… ……
…… …… ……
}
it.remove();
}
}
Selector.wakeup()select()
new Thread(this).start();
try{
//Sleep 30 seconds
Thread.sleep(30000);
System.out.println("wakeup the select");
s.wakeup();
}catch(Exception e){
e.printStackTrace();
}
Socket30select()straceSelectorwakeup()
1)gcjsunjavacclassgij2)gcjgcjGDBJava
lsofpipeGNUUnixCselect()pthread_kill()strace
stracewakeup the selectwakeup
标签:数码 科技 网络

