亚洲百家乐博彩


亚洲百家乐博彩当然,对于他们俩来说,分或者不分,都全无分别。亚洲百家乐博彩等赵名扬醒来时,太阳已经升得老高了。亚洲百家乐博彩因为儿子在学校调皮捣蛋,他们班主任给我打电话。她说:“你好我是某某的班主任我叫王金莲。”我脑袋一抽,说:“哦,潘老师好啊。”然后听到了电话嘟嘟声。</pstyle="text-indent:2em;text-align:left;"></pstyle="text-indent:2em;text-align:left;"></pstyle="text-indent:2em;text-align:left;"></pstyle="text-indent:2em;text-align:left;">亚洲百家乐博彩2.起因亚洲百家乐博彩致我们最亲爱的青春。
亚洲百家乐博彩河边垂钓者
亚洲百家乐博彩让我找回属于我的方向
亚洲百家乐博彩我总爱在黄昏的树下
亚洲百家乐博彩我珍惜一场梦,
亚洲百家乐博彩最奇葩的家长:孩子犯错了,爸爸在教训,用手打屁股,孩子直呼爷爷的大名,你儿子有本事啦,打死你孙子!他爷爷听见后,拿着擀面杖出来,用这个!往头上抡~~亚洲百家乐博彩正方辩题:人为他人而活。 反方辩题:人为自己而活。此为背景。   反方提问正方:对方辩友既然是为了他人而活,那你能给我买个鸡腿么?   正方:能   反方:那你别比了,现在去买吧。   正方:……亚洲百家乐博彩做铝材和电子还有注塑。

皇冠足球比分

大发论坛时时彩平台尊龙娱乐是黑网吗海天国际娱乐城注册送钱凯发娱乐亚美国际娱乐城 金龙国际 www.am8.com 亚洲城娱乐 老k国际娱乐城 666k8.com 金威国际娱乐城 名人国际娱乐城 ag娱乐平台 V博娱乐城 御金场娱乐天博国际拉斯维加斯国际百利沙娱乐城乐泰国际香港红牛网免费资料品特轩这个网站成立多久了2015注册开户送白菜免费送彩金38nba竞彩投注百家乐大忌澳门金沙国际

JavaIO和JavaNIO

BIO和NIO

BIO在之前的服务器处理模型中,在调用ServerSocket.accept()方法时,会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会accept一个新连接,接着启动一个线程去处理该客户端的请求。在这个新的线程中,也会在read()方法中阻塞,直到读取完数据,处理完成后销毁该处理线程。

这样会有什么问题呢?

当客户端并发访问增加后,服务端线程个数膨胀,频繁出现由于IO阻塞导致挂起的线程,系统性能将急剧下降,容易发生线程堆栈溢出、创建新线程失败等问题。

阻塞导致大量线程资源被浪费;阻塞可导致大量的上下文切换,很多切换其实是无意义的

Java自1.4以后,加入了新IO特性NIO,NIO带来了non-blocking特性。

那么NIO是如何帮助我们解决这种问题的呢(反应器设计模式)?

1). 由一个专门的线程来处理所有的 IO 事件,并负责分发。 
2). 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。 
3). 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。 

服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道 (channel) 上的事件。我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达,则处理这些事件,如果没有感兴趣的事件到达,则处理线程会一直阻塞直到感兴趣的事件到达为止。

1、IO的例子

/* 字节IO */
    public void byteIO() throws FileNotFoundException, IOException {
        FileInputStream fin = new FileInputStream(new File(
                "D:\\test\\byteio_in.txt"));
        FileOutputStream fout = new FileOutputStream(new File(
                "D:\\test\\byteio_out.txt"));
        int c = -1;
        while ((c = fin.read()) != -1) {
            fout.write(c);
        }
        fin.close();
        fout.close();
    }

    /* 字符IO */
    public void charIO() throws FileNotFoundException, IOException {
        FileReader reader = new FileReader(new File("D:\\test\\chario_in.txt",
                ""));
        FileWriter writer = new FileWriter(new File("D:\\test\\chario_out.txt"));
        char[] charArr = new char[512];
        while (reader.read(charArr) != -1) {
            writer.write(charArr);
        }
        reader.close();
        writer.close();
    }

    /* bufferIO */
    public void bufferIO() throws FileNotFoundException, IOException {
        BufferedInputStream bufferReader = new BufferedInputStream(
                new FileInputStream("D:\\test\\bufferio_in.txt"));
        BufferedOutputStream bufferWriter = new BufferedOutputStream(
                new FileOutputStream("D:\\test\\bufferio_out.txt"));
        int c = -1;
        while ((c = bufferReader.read()) != -1) {
            bufferWriter.write(c);
        }
        bufferReader.close();
        bufferWriter.close();
    }

2、NIO的例子

/* NIO */
    public void NIO() throws FileNotFoundException, IOException {
        FileInputStream fin = new FileInputStream("D:\\test\\nio_in.txt");
        FileOutputStream fout = new FileOutputStream("D:\\test\\nio_out.txt");
        FileChannel finChannel = fin.getChannel();
        FileChannel foutChannel = fout.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(512);
        while (finChannel.read(buffer) != 1)//读到缓存
        {
            buffer.flip();//指针跳到缓存头
            foutChannel.write(buffer);
            buffer.clear();//重置缓冲区
        }
        fin.close();
        fout.close();
    }

3、NIO实现非阻塞Server服务

下面是一个NIO实现Server的例子

public class MultiPortEcho {
    private int ports[];
    private ByteBuffer echoBuffer = ByteBuffer.allocate(1024);

    public MultiPortEcho(int ports[]) throws IOException {
        this.ports = ports;
        go();
    }

    private void go() throws IOException {
        // Create a new selector
        Selector selector = Selector.open();

        // Open a listener on each port, and register each one with the selector
        for (int i = 0; i < ports.length; ++i) {
            ServerSocketChannel ssc = ServerSocketChannel.open();
            ssc.configureBlocking(false);
            ServerSocket ss = ssc.socket();
            InetSocketAddress address = new InetSocketAddress(ports[i]);
            ss.bind(address);
            SelectionKey key = ssc.register(selector, SelectionKey.OP_ACCEPT);
            System.out.println("Going to listen on " + ports[i]);
        }

        while (true) {
            int num = selector.select();
            Set selectedKeys = selector.selectedKeys();
            Iterator it = selectedKeys.iterator();

            while (it.hasNext()) {
                SelectionKey key = (SelectionKey) it.next();

                if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
                    // Accept the new connection
                    ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
                    SocketChannel sc = ssc.accept();
                    sc.configureBlocking(false);

                    // Add the new connection to the selector
                    SelectionKey newKey = sc.register(selector,SelectionKey.OP_READ);
                    it.remove();

                    System.out.println("Got connection from " + sc);
                } else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
                    // Read the data
                    SocketChannel sc = (SocketChannel) key.channel();

                    // Echo data
                    int bytesEchoed = 0;
                    while (true) {
                        echoBuffer.clear();
                        int r = sc.read(echoBuffer);
                        if (r <= 0) {
                            break;
                        }
                        echoBuffer.flip();
                        sc.write(echoBuffer);
                        bytesEchoed += r;
                    }

                    System.out.println("Echoed " + bytesEchoed + " from " + sc);
                    it.remove();
                }

            }
        }
    }

    static public void main(String args[]) throws Exception {

        int ports[] = {1234,6765,7987};

        for (int i = 0; i < args.length; ++i) {
            ports[i] = Integer.parseInt(args[i]);
        }

        new MultiPortEcho(ports);
    }
}

 参考资料:

http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html#ibm-pcon

http://weixiaolu.iteye.com/blog/1479656

posted @ 2015-11-24 21:39 mingziday 阅读(...) 评论(...) 编辑 收藏