座IO理解力

座IO理解力

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

         一般堵塞IO服务器通信,通常有一个单独的Acceptor线程负责监控client联系,它接收client对于每个请求连接后client分配用于处理一个新的线程,处理后。返回应答给client。线程才销毁。

         来看一下堵塞IOserver的代码:

         server启动类

package com.bio.demo.Server;

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

import com.bio.demo.Server.handler.TimerServerHandler;

/**
 * @author zhouxuejun
 *
 * @date 2014年10月20日 下午7:08:58
 */
public class TimeServer {
	
     public static ServerSocket server=null;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			server=new ServerSocket(8080);
			Socket socket=null;
			while(true){
				socket=server.accept();
				new Thread(new TimerServerHandler(socket)).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
       
	}

}

处理线程类:

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

/**
 * @author zhouxuejun
 *
 * @date 2014年10月20日 下午7:17:28
 */
public class TimerServerHandler implements Runnable {

	 private Socket socket;
	 public  TimerServerHandler(Socket socket) {
		// TODO Auto-generated constructor stub
		 this.socket=socket;
	}
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	@Override
	public void run() {
		// TODO Auto-generated method stub
      BufferedReader in=null;
      PrintWriter out=null;
      try {
		in=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
		out=new PrintWriter(this.socket.getOutputStream());
		String body=null;
		String tag=null;
		while(true){
		body=in.readLine();
		if(null==body)
			 break;
        out.print(body+"_return"); 
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		if(null!=in){
			try {
				in.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		if(null!=out){
			out.close();
			out=null;
		}
		if(null!=this.socket){
			try {
				this.socket.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			this.socket=null;
		}
		e.printStackTrace();
	}
	}

}

通过上面的代码能够看出。每当一个新的client请求过来,服务端都须要创建一个新的线程处理新接入的client请求,一个线程仅仅能处理一个client的请求。

在高性能server应用领域,往往须要面向成千上万client的并发接入。堵塞IO显然无法满足高性能,高并发现场访问。

版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116915.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月13日 下午1:00
下一篇 2022年1月13日 下午1:00


相关推荐

  • 【ESP32接入国产大模型之腾讯混元】

    【ESP32接入国产大模型之腾讯混元】

    2026年3月13日
    2
  • 10个调试Java的技巧建议收藏

    调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷。对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序。本文介绍了Java程序员必知的10个调试技巧,

    2021年12月20日
    49
  • Qt编写安防视频监控系统(界面很漂亮)「建议收藏」

    Qt编写安防视频监控系统(界面很漂亮)「建议收藏」一、前言视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅猛,人脸识别相关的技术和应用这几年处于风口浪尖,衍生了特别多的应用产品,各种人脸识别的产品遍地开花,刷脸门禁,车站机场人脸识别,刷脸取票等,但是其实大部分内行人士可能都比较绝望,外行感觉像看科幻片一样…

    2022年7月25日
    31
  • Linux命令 – su命令

    Linux命令 – su命令Linux命令-su命令  su是swithuser的缩写,在Linux中su命令可让用户暂时变更登入的身份,除root外变更时须输入所要变更的用户帐号与密码。1.语法:su[参数][-][用户帐号]2.功能:  变更用户身份,若不指定用户帐号,则预设变更为root。3.参数:-c<指令>或–command=<指令> 执行完指定的指令后,即恢复原来的身份。-f或–fast 适用于csh与tsch,使shell不用去读取启动文件。–l

    2025年6月2日
    4
  • Rectified Linear Unit_激活函数图像

    Rectified Linear Unit_激活函数图像传统Sigmoid系激活函数传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在。从数学上来看,非线性的Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在

    2025年6月30日
    4
  • linux 查看网卡以及开启网卡「建议收藏」

    linux 查看网卡以及开启网卡「建议收藏」解决Error:Nosuitabledevicefound:nodevicefoundforconnection”Systemeth0″解决使用VMware克隆出来的新虚拟机无法联网的问题一.背景我们安装好了一个虚拟机,我想做分布式集群,想模拟几台服务器,这时就想直接复制已经有的安装好的虚拟机,这样比较省事,不要在重复的安装虚拟机并配置JAVA环境,省…

    2022年10月19日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号