文档章节

伪异步i/o模型

泡海椒
 泡海椒
发布于 2016/02/17 10:35
字数 393
阅读 15
收藏 0

伪异步i/o模型
采用线程池和队列可以实现一种叫做伪异步I/O通信框架
当有新的客户接入的时候,将客户端的socket封装成为一个task 投递到后端线程池中进行处理,jdk线程池维护一个消息队列和n个活跃线程对消息的任务进行处理,由于线程池可以设置消息队列
的大小和最大的线程总数,因此资源占用可控
package paohaijiao.netty.pseudoAsynchronous;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import paohaijiao.netty.bio.TimerServerHandler;

public class TimeServer {

    public static void main(String[] args) throws IOException {
        
        
        int port = 8080;
        if (args != null && args.length > 0) {
            port = Integer.valueOf(args[0]);
        }
        ServerSocket server = null;
        try {
            server=new ServerSocket(port);
            System.out.println("The timer server start in port:"+port);
            Socket socket=null;
            
            TimeServerHandlerExecutePool singelExecutor=new TimeServerHandlerExecutePool(50,1000);
            while(true){
                socket=server.accept();
                new Thread(new TimerServerHandler(socket)).start();
            }
            
            
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(server!=null){
                System.out.println("The timer server is close:");
                server.close();
                server=null;
                
            }
        }
        
        

    }

}
package paohaijiao.netty.pseudoAsynchronous;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TimeServerHandlerExecutePool {
    private ExecutorService executor;

    public TimeServerHandlerExecutePool(int maxPoolsize,int queenSize) {
        
        executor=new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
                maxPoolsize,120L,TimeUnit.SECONDS,
                new ArrayBlockingQueue<java.lang.Runnable>(queenSize)
                );

        
    }
    
    
    public void execute(java.lang.Runnable task){
        
        executor.execute(task);
    }
}

package paohaijiao.netty.bio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TimeClient {

    public static void main(String[] args) {

        int port = 8080;
        if (args != null && args.length > 0) {
            port = Integer.valueOf(args[0]);
        }

        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
        try {
            socket = new Socket("127.0.0.1", port);
            in = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);
            out.println("QUERY TIME ORDER");
            System.out.println("Send order 2 server succeed");
            String resp = in.readLine();
            System.out.println("Now is:" + resp);

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            if (out != null) {
                out.close();
                out = null;
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                socket = null;
            }

        }
    }

}

© 著作权归作者所有

共有 人打赏支持
上一篇: nio服务端序列图
下一篇: activemq调优
泡海椒
粉丝 11
博文 278
码字总数 286768
作品 0
成都
程序员
私信 提问
网络-BIO-伪异步I/O

为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例...

xyh12344
2015/12/21
59
0
I/O模型与Java

原文已同步至http://liumian.win/2016/11/23/io-model-and-java/ 学习I/O模型之前,首先要明白几个概念: 同步、异步 阻塞、非阻塞 这几个概念往往是成对出现的,我们常常能够看到,等描述,正...

那只是一股逆流
2016/11/23
25
0
Netty 之传统 BIO、NIO 编程

说明 系列文章:http://www.jianshu.com/p/594441fb9c9e 本文完全参考自《Netty权威指南(第2版)》,李林峰著。 传统 BIO 编程是什么样的? 基本的网络编程模型是,即两个进程间相互通信,其...

被称为L的男人
2017/09/02
0
0
Java NIO 机制分析(一) Java IO的演进

一、引言 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员再开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要有以下一些问题: (1)没有数据缓冲区,I/O性能存在问题...

宸明
04/20
0
0
网络模型同步异步与I/O模型同步异步

理解 I/O模型的同步与异步 网络 I/O 的同步与异步跟网络模型的同步与异步不同。在网络 I/O 接口中,有阻塞、非阻塞、多路复用、信号驱动、异步I/O五中I/O模型。网络I/O分为俩步,第一步等待条...

sdoyuxuan
10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
4
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
8
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
12
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
6
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部