Netty-使用线程池优化BIO-代码实现

【Netty框架01】简介及BIO编程 Netty简介,IO模型,Java BIO 阅读详情

1、背景介绍

已知NIO的性质是每有一个新的连接请求就要新建一个线程与之连接,线程的创建对资源的消耗是很大的,可以使用之前学过的池化思想来节省线程资源

2、设计要求

使用BIO模型食记一个服务器端,监听某个端口,当有客户端请求连接时就启动一个线程与之通讯,服务器端可以接收服务器发生的数据
在这里插入图片描述

3、代码实现

代码分为两部分,第一部分是main函数,第二部分是handler函数,需要注意是是涉及到Socke和输入流的一些Java知识点

package BIO;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class BIOServer {
    public static void main(String[] args) throws IOException {
        //线程池:首先创建一个线程池,如果有客户端连接,就创建一个线程与之通讯
        ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
        
        //创建ServerSocket
        ServerSocket serverSocket = new ServerSocket(6666);
        
        System.out.println("服务器启动了");
        
        while(true){
            System.out.println("线程池信息   id=" + Thread.currentThread().getId() + 
                    " 名字 =" + Thread.currentThread().getName());
            //监听,等待客户端连接
            System.out.println("等待连接...");
            final Socket socket = serverSocket.accept();
            System.out.println("连接到一个客户端");
            
            //创建一个线程与之通讯
            newCachedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    //可以与客户端通讯
                    handler(socket);
                }
            });
        }
    }


    //重写run()涉及到的方法,handler方法负责与客户通讯
    public static void handler(Socket socket){
        try {
            System.out.println("线程池信息   id=" + Thread.currentThread().getId() +
                    " 名字 =" + Thread.currentThread().getName());
            byte[] bytes = new byte[1024];
            //通过Socket获取输入流
            InputStream inputStream = socket.getInputStream();
            //通过循环的方式读取客户端发送的数据
            while (true){
                System.out.println("线程池信息   id=" + Thread.currentThread().getId() +
                        " 名字 =" + Thread.currentThread().getName());
                System.out.println("read...");
                int read = inputStream.read(bytes);
                //输出客户端发送的数据
                if(read != -1){
                    System.out.println(new String(bytes,0,read));
                }else{
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            System.out.println("断开与client的连接");
            try {
                socket.close();
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

4、测试程序

  • run上述测试代码

  • 打开cmd命令窗口输入 tenlnet 127.0.0.1 6666

  • 回车后发送数据 send okok,再回车客户端将发生数据
    在这里插入图片描述

  • 在IntellIJ下方BIOServer窗口即可查看相关信息,进行验证判断
    在这里插入图片描述

HybridCLR热更新打包报错全解析:从原理到实战解决方案 热更新技术是现代游戏和应用开发中实现动态内容交付与Bug修复的核心机制,它允许开发者在无需重新发布完整应用的情况下更新代码逻辑。其原理通常涉及在运行时加载并执行新的代码模块,这要求框架在底层实现安全的代码隔离、内存管理与元数据桥接。在Unity生态中,HybridCLR作为基于IL2CPP的高性能热更新解决方案,通过补充元数据和AOT泛型引用技术,实现了对C#代码的原生级热更支持,显著提升了开发迭代效率与线上问题修复能力。然而,在实际的工程实践中,尤其是在面向Android、iOS等多平台打包构建时,开发者 阅读详情

相关推荐

抓包抖音充值页面实现微信支付宝充值抖币,可提供api

抓包抖音充值接口教程,实现微信支付宝充值抖币收款通道

eeeee1212的博客 1万+

IO之我见(一)BIO

java BIO就是传统的java io变成 BIO(Blocking IO)同步阻塞,服务端实现模式为一个连接,一个线程。客户端有连接请求时,服务端就需要启动一个线程进行连接,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池来改善。 服务端线程代码 package com.chen.three; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; imp

Chen_leilei的博客 574

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 279

高并发系统线程模型优化:BIO_NIO_AIO、Netty 线程池配置与性能调优

本文系统探讨了高并发系统中的线程模型优化策略。首先分析了BIO/NIO/AIO三种I/O模型的特点:BIO线程效率低适用于小型系统,NIO通过Selector机制实现多路复用适合高并发服务,AIO依赖操作系统通知但实际应用较少。重点介绍了Netty线程池配置,包括EventLoopGroup参数设置及I/O密集型和计算密集型场景的优化建议。最后提出性能调优方向,如线程池优化、Protobuf序列化和TCP参数调整等,通过实际案例展示了吞吐量提升140%的优化效果。文章指出NIO+Netty仍是当前企业级高并

u010843275的博客 963

基于ESP32-P4的低成本旋转式激光雷达系统设计

激光雷达(LiDAR)作为机器人环境感知的核心传感器,其本质是融合光学测距、机电控制与实时数据处理的嵌入式系统。理解时间飞行(ToF)原理与机械旋转耦合机制,是实现高精度点云采集的基础;而系统级误差源——如计时抖动、电机惯性、信号串扰和温漂——直接决定实际建图鲁棒性。在资源受限场景下,选用RISC-V双核MCU(如ESP32-P4)可兼顾实时控制与网络服务能力,通过硬件时间戳捕获、S型加减速轨迹规划、旋转变压器供电及双Bank OTA等工程手段,有效平衡分辨率、帧率与稳定性。本文围绕360°旋转式激光雷达的

weixin_36231030的博客 430

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 475

netty bio 实现

Socket server 完成: public class SocketServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9000); while (true) { ...

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 496

DDR5内存调优实战:手把手教你搞定Write Leveling Training Mode(附时序图解析)

本文深入解析DDR5内存调优中的Write Leveling Training Mode技术,详细介绍了其核心原理、硬件准备、实战步骤及常见问题解决方案。通过JESD79-5标准定义的反馈机制,帮助硬件工程师精确对齐DQS与CK信号,提升系统稳定性和数据可靠性。附有时序图解析和代码示例,适合DDR5内存系统设计与调试参考。

weixin_29256771的博客 550

BIO,NIO,Netty代码实现

NIO入门代码体验

zhoupan2008的专栏 370

基于Simulink的六旋翼无人机动力分配仿真建模示例

六旋翼无人机概述特点:高冗余度、增强的负载能力和更好的故障容忍性。关键组件电机与螺旋桨:提供升力和推力。电调(ESC):控制电机转速。IMU(惯性测量单元):包括加速度计和陀螺仪,用于姿态估计。飞控板:处理传感器数据并生成控制信号。应用场景:航拍摄影、农业监测、物流配送等。仿真目标搭建一个简化的六旋翼无人机动力分配模型,涵盖电机驱动、姿态控制及位置控制过程。分析不同条件下的性能指标(如响应时间、稳定性等),并探讨六旋翼无人机的设计优化。

xiaoheshang_123的博客 484

北斗导航 | 2023 PTTI会议论文 2023 ITM会议论文 2022 ION GNSS+ 会议论文下载:ION 美国导航学会

2023 国际技术会议(ITM) 2023 精密时间和时间间隔系统和应用会议(PTTI) 2022 美国导航学会国际会议(ION GNSS +)

尘世冰封的专栏 4612

为什么Netty线程池默认大小为CPU核数的2倍

需要面试文档可用V扫描左侧二维码领取完整版 有位工作5年的小伙伴问我说,为什么Netty线程池默认大小为CPU核数的2倍,今天,我花2分钟时间给大家专门分享一下我对这个问题的理解。 另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以在我的煮叶简介中找到。 1、分析原因 我们都知道使用多线程的本质是为了提升程序的性能,总体来说有两个最核心的指标,一个延迟,一个吞吐量。延迟指的是发出请求到收到响应的时间,吞吐量指的是。这两个指标之间有一定的关联,因为同等条件下延迟越短吞.

Tom弹架构 2489

华为HCIP的学习大纲和计划

HCIP(华为认证 ICT 高级工程师)核心围绕华为 ICT 技术体系,不同方向(如路由交换、云计算、安全等)课程目录不同,以下是最热门的。

迷逝 573

【Java】建立一个Tomcat服务器(一)BIO版本的http服务器创建,java网络编程并进行计算机网络状态分析、jdk分析、Linux相关指令使用分析、IO分析等

Tomcat一、准备工作1.1 Tomcat工作分析1.2 创建工程二、编写2.1 监听连接和计算机网络状态分析2.1.1 编写程序2.1.2 访问分析2.2 http报文解析2.2.1 报文解析 一、准备工作 程序运行在Linux下,且会用到较多linux指令进行进程、网络相关的分析,代码开源在我的GitHub项目LiangTomcat上 1.1 Tomcat工作分析 Tomcat主要负责监端口 当有客户端连接到端口时,创建新的Socket并进行处理 分析http请求头,将得到的URL与指定的处理函数进

qq_39165617的博客 1667

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Netty——BIO、NIO 与 Netty

本文介绍了 BIO、NIO 与 Netty,并对比了 NIO 和 Netty 的区别。

qq_61350148的博客 1217

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BIO、NIO、Netty演化总结

1、采用reactor模型,所有的操作均采用事件通知机制来实现(包括连接和读写数据,基于jdk的future之上做了封装,运用观察者模式和装饰器模式,避免future.get带来的程序阻塞)其中bossGroup就是mainreactor,也就是负责接收客户端的连接的,workerGroup就是subreactor,也就是专门负责读写数据的。4、一个EventLoop(可以理解为其实就是一个线程),可以绑定多个socketchannel,也就是一个线程可以同时处理多个连接的数据的读写。

qq_17805707的博客 1581

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

BIO,NIO,AIO区别

BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步:异步就是发起一个调用后,立刻得到被调..

Meiko记录 2万+

BIO到NIO到Netty实现原理

目录 BIO 简单代码实现 代码优化实现 NIO 代码实现 nio相对bio Netty 1. Netty简介 2. Netty线程模型 3. Reator模式的实现 1.第一种实现模型 2.Reactor多线程模型 3.Reactor主从模型 4.Netty模型 4.Buffer 5.简单代码实现 6.总结 BIO 简单代码实现 首先是我们熟悉的bio,利用原生socket进行操作。 public class SocketServer { publ.

qq1344691727的博客 226

简述BIO、NIO、epoll与Netty

简述BIO、NIO、epoll与NettyBIO与NIOBIO为什么慢什么是阻塞NIO的进化epoll 与 select 原理简述select的流程epoll流程Netty 与 NIO原生NIO存在的问题Netty的优点Netty模型 BIO与NIO BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。 NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端

kennyJ的博客 1395

【Netty系列】Netty/BIO/NIO/AIO

Netty是一个开源的异步的事件驱动的网络应用框架,用于快速开发高性能的网络服务器和客户端。它主要用于构建可伸缩的网络应用程序,如协议服务器和客户端。Netty的设计目标是提供一个简单、快速、稳定的网络应用程序框架,同时保持灵活性和可扩展性。Netty基于NIO(非阻塞I/O)的事件驱动模型,使用了高效的线程池和优化的内存分配机制,使得它在处理大量并发连接时表现出色。Netty广泛用于构建各种类型的网络应用,包括Web服务器、游戏服务器、即时通讯系统等。

Love Peace 1440

超硬核!!!一篇文章搞定BIO、NIO、AIO、Netty(详细基础内容+网络编程内容+代码示例)【网络编程 2】

BIO、NIO、AIO、NettyBIO、NIO、AIO、Netty什么是IO在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别什么是BIO什么是NIO什么是AIO什么NettyBIO和NIO、AIO的区别IO流的分类什么是内核空间五种IO模型1.阻塞IO(blocking I/O)2.非阻塞IO(noblocking I/O)3.异步IO(asynchronous I/O)4.信号驱动I...

小杰爱吃蛋的博客 1万+

一.Netty入门到超神系列-BIO、NIO、AIO的认识

前言 本文章是《Netty入门到超神系列》第一章,主要介绍java的三大I/O模型:BIO,NIO,AIO,因为Netty采用了NIO模型,要透彻Netty就得懂NIO原理,NIO又是在BIO基础进行演变,所以我们得对这些I/O都要有一些了解。 I/O概述 I/O其实是Input,Output的缩写,意思是输入和输出,比如:把磁盘中的一个文件读入Java内存中,站在Java内存的角度来看就是输入即input, 可以使用Java提供的输入流如:InputStream#read 来实现。如果是把一个段文本内容从

墨家巨子@俏如来 1813

Netty基础------ BIO

Netty基础------ BIO(同步阻塞IO) 目录 Netty基础------ BIO 1、什么是BIO 2、BIO的工作机制 3、代码实操演示 4、总结 1、什么是BIO Java BIo就是传统的 java io编程,其相关的类和接口在 java.io BlO( blocking I/O):同步阻塞,我们熟知的Socket编程就是BIO,每个请求对应一个线程去处理。一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作)。阻塞的原因在于:操作系统

烟雨gps 351

Netty 介绍及 BIO 编程(一)

1. Netty 介绍 Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序 Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景

sco5282的博客 486

从BIO到NIO再到Netty一次讲明白

一、Netty简介 netty是一个高性能、高可扩展的异步事件驱动的网络应用程序框架,它极大地简化了TCP和UDP客户端和服务器开发等网络编程。 要了解netty首先我们需要要先了解BIO和NIO: 1. BIO: BIO是Java中提供的阻塞式网络编程开发包,它通过socket接口和I/O包进行通信与数据处理。但是,这种方法有一些缺陷,比如,ServerSocket.accept()方法是一个阻...

chenzihao36的博客 420

我所知道Netty之多多认识BIO

针对于BIO的多多认识、通过聊天室认识

我吃西红柿 794
上一篇: Netty-三种IO方式-对比介绍
下一篇: Netty-NIO学习-基于FileChannel读写实战
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值