BIO通信机制弊端

Posted by 皇甫嗷嗷叫 on 12-13,2019

BIO通信机制及其弊端

一、BIO通讯模型

采用BIO通信模型的服务端,通常都会使用一个Acceptor线程负责监听客户端的连接!接收到客户端的连接请求之后,为每一个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端!线程销毁!典型的一请求一应答的通信模型!
BIO通信模型

弊端

该模型的最大问题就是缺乏弹性伸缩的能力,当客户端并发量增加后,服务端的线程数和客户端并发访问数呈1:1的正比关系!当线程数膨胀之后系统的性能将急剧下降,随着并发访问的访问量继续增大,不能对外提供服务!

二、模拟时钟服务请求(BIO方式) 伪异步IO操作

时间服务器 服务端

package com.netty.bio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @program: nodes-netty->TimeServer
 * @description: BIO服务端
 * @author: huangfu
 * @date: 2019/11/25 12:40
 **/
public class TimeServer {
    /**
     * 定义一个线程池
     */
    private static final ThreadPoolExecutor fastTriggerPool = new ThreadPoolExecutor(50, 200, 60L, TimeUnit.SECONDS,
            new LinkedBlockingQueue<>(1000),
            r -> new Thread(r, "TimeServer" + r.hashCode()));


    public static void main(String[] args) {
        int port = 8080;

        ServerSocket serverSocket = null;
        try{
            serverSocket = new ServerSocket(port);
            System.out.println("这个时间服务已经启动了,端口是8080");
            Socket socket = null;
            while (true){