Java BIO高并发编程

并发编程处理实战篇15:BIO和NIO详解 到底什么是“IO Block” 很多人说BIO不好,会“block”,但到底什么是IO的Block呢?考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你的直觉告诉你,这两种都算“Block”,那么很遗憾,你的理解与Linux不同。Linux认为: 对于第一种情况,算作block,因为Linux无法知道网络上对方是否会发数据。如果没数据发过来,对于调用read的程序来说,就只能“等”。 对于第二种情况,不算做bl 阅读详情

Java BIO高并发编程

图解转发模块
在这里插入图片描述

代码实现

public class Main implements Runnable {
    Socket socket = null;
    public Main(Socket socket){
        this.socket=socket;
    }
    @Override
    public void run() {
        try {
            new Writ().start();
            InputStream inputStream = socket.getInputStream();
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = inputStream.read(bytes)) != -1) {
                System.out.println(new String(bytes, 0, len, "utf-8"));
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    class Writ extends Thread{
        OutputStream outputStream=null;
        Scanner scanner=null;
        @Override
        public void run() {
            try {
                outputStream = socket.getOutputStream();
                scanner=new Scanner(System.in);
                String s="";
                while (true){
                    s = scanner.next();
                    outputStream.write(s.getBytes());
                    outputStream.flush();
                    if(s.equals("p")){
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
class Demo{
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(8888);
        int nThreads = Runtime.getRuntime().availableProcessors()*2;
        ExecutorService executorService = Executors.newFixedThreadPool(nThreads);
        while (true){//死循环进行转发
            Socket accept = serverSocket.accept();//监听
            executorService.submit(new Main(accept));//将监听后socket转发给业务层
        }
    }
}

VS Code配置MASM32汇编环境:从安装到调试的完整指南 本文提供了一份详尽的指南,教你如何在VS Code中配置MASM32汇编开发环境,实现从安装、环境变量设置到编写、编译和调试32位Windows汇编窗口程序的完整工作流。通过集成现代编辑器的便利性与经典汇编工具链,旨在降低学习门槛,提升底层开发效率。 阅读详情

相关推荐

大模型抽取知识图谱三元组的可行性分析

通过结合传统信息抽取模型与大语言模型的混合架构,可高效完成从学术文献到知识图谱三元组的全流程构建。分阶段优化:传统模型负责粗粒度抽取,大模型负责细粒度修正。灵活提示设计:通过少样本学习引导大模型理解领域本体。严格质量控制:结合规则引擎和人工校验,确保三元组准确性。该方案可显著提升知识图谱构建效率,适用于学术研究、企业知识库等场景。

qq_20647053的博客 1064

java高并发实战(八)——BIO、NIO和AIO

由于之前看的容易忘记,因此特记录下来,以便学习总结与更好理解,该系列博文也是第一次记录,所有有好多不完善之处请见谅与留言指出,如果有幸大家看到该博文,希望报以参考目的看浏览,如有错误之处,谢谢大家指出与留言。一、什么是NIO?NIO是New I/O的简称,与旧式的基于流的I/O方法相对,从名字看,它表示新的一套Java I/O标准。它是在Java 1.4中被纳入到JDK中的,并具有以下特性:   ...

平凡之路无尽路的博客 2813

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

网络编程之中篇——BIO模型详述

1、BIO介绍 1.1、BIO的概念 BIO(Blocking IO)同步阻塞IO模型,在JDK 1.4之前,建立网络链接采用的只有BIO的模型 需要服务端首先启动建立一个ServerSocket实例,然后客户端启动Socket实例对服务端进行连接通信,服务端通过调用accept方法等待接收客户端的连接请求,一旦接收到连接请求,就可以进行读写操作 在BIO编程中,相应的方法会产生阻塞:accept()、read()、write()、connect(),直至相关的操作等待完成之后才能继续后续代..

m0_54356563的博客 1440

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 353

zemax 如何编译用户自定义DLL(含VS下载教程)

zemax 如何编译用户自定义DLL(含VS下载教程)

weixin_72050316的博客 491

(高并发)BIO、NIO、AIO的区别

一.同步阻塞IO(BIO): 一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作) 阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。 二.同步非阻塞IO(NIO): NIO作出的改进就是“一个请求一个线程”,在连接到服务端的众多s...

Sakura259的博客 456

8、水力压裂引起的地质材料力学性质变化的可视化研究

本研究探讨了水力压裂引起的地质材料力学性质变化的可视化方法。利用超声剪切波形数据,通过短时傅里叶变换(STFT)和主成分分析(PCA)进行特征提取和降维,并应用K-means聚类、凝聚聚类和DBSCAN等无监督学习方法对地质力学变化进行非侵入式可视化分析。研究比较了不同特征工程、聚类方法和降维策略对可视化效果的影响,并结合位移不连续性理论为聚类结果分配地质力学变化指数,以提高结果的物理解释性。最终,该方法成功实现了对水力压裂引起的岩石力学性质变化的高效、可靠可视化。

emacs5lisp的博客 109

Java 并发 —— 从 BIO 到 NIO

BIO,同步阻塞;NIO:同步非阻塞; 在 NIO 技术之前,服务器侧使用多线程是 BIO 的一种伪阻塞的解决方法; BIO 的多线程机制存在的问题: 每一个 Socket 连接服务器,服务器侧都立刻开启(创建)一个线程处理, Socket socket = server.accept(); while (true) { new Thread(new ServerHandler(s...

1085

滤波电路Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了滤波电路的基础知识及其应用。首先按频率选择性和实现方式对滤波电路进行分类,详细阐述了低通、高通、带通、带阻滤波器以及无源、有源滤波器的特点。接着重点分析了桥式整流电容滤波、电感滤波、LC滤波和CRπ型滤波四种典型电路的工作原理、应用场景及设计要点。通过理论公式和实际案例,指导如何选择滤波元件参数,考虑寄生效应,并通过仿真验证设计效果。最后提供了硬件工程师笔试面试相关的技术资源链接,包括器件知识、电路仿真及企业真题解析等内容。本文可作为电子电路设计领域工程技术人员的学习参考资料。

XU157303764的博客 2165

软考嵌入式 第五讲 嵌入式Linux系统技术

5.1 inittab配置文件 Linux实时操作系统开机引导时首先启动内核,由内核检查和初始化硬件设备,载入设备的驱动程序模块,安装root文件系统,然后内核将启动一个名为init的进程,它是系统运行的第一个进程,进程号为1。在init运行完成并启动其他必要的后续进程后,系统开始运行,引导过程结束。 在任何时候,可以在文件inittab中添加新的记录项。重新检查inittab文件时,可以通过命令:init q/ Q使init进程立即重新读取并处理文件inittab。 5.1.1 inittab文件记录

Leon的博客 526

Java IO演进:从BIO到NIO与Netty,掌握高并发网络编程核心

在计算机系统中,输入输出(IO)是程序与外部世界交互的基础机制,其性能直接影响应用吞吐与响应。IO模型的核心原理在于如何处理数据读写时的等待:传统阻塞IO(BIO)采用同步阻塞方式,每连接独占线程,简单但资源消耗大;而非阻塞IO(NIO)则通过多路复用器(Selector)实现同步非阻塞,单线程可监控大量通道事件,大幅提升并发能力。这一技术价值在于高效利用系统资源,支撑高并发场景,如即时通讯、游戏服务器等。随着分布式架构普及,**Netty**作为基于NIO的异步事件驱动框架,通过Reactor线程模型与P

cuyi7076的博客 525

lammps模拟技巧:高熵合金势函数设置三种方法

大家好,我是小马老师。 本文继续介绍lammps模拟中的势函数设置方法。 在前面的文章中,介绍过高熵合金的建模:高熵合金建模 高熵合金包含的原子数较多,势函数的设置相对复杂,在平时一对一的咨询中,这种问题也相对较多。 下面介绍三种高熵合金势函数设置方法。 1.下载专用势函数 下面的网站包含了大多数原子的势函数: https://www.ctcms.nist.gov/potentials/ 如需下载包含Fe原子的势函数,直接点Fe: 出现势函数列表: 比如Al-Co-Cr-Fe-Ni就是高熵合金AlCoC

lammps_jiayou的博客 8959

【网络编程】Java高并发IO模型深度指南:BIO、NIO、AIO核心解析与实战选型

本文深入解析Java中三种IO模型:BIO(同步阻塞)、NIO(同步非阻塞)与AIO(异步非阻塞)的核心机制与适用场景。BIO简单易用但线程资源消耗大,仅适合低并发场景;NIO通过多路复用(Selector+Channel)支持高并发网络通信,是实时服务(如API网关)的首选,但编程复杂度较高;AIO由内核异步完成数据拷贝,适合文件IO和大数据处理,但网络IO支持较弱且依赖操作系统。性能对比显示,高并发网络场景推荐NIO+Netty框架,文件处理优选AIO,而BIO仅用于简单工具或原型验证。

笃行其道的博客 5569

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java高并发网络编程(二)BIO

一、阻塞 服务器端 public class BIOServer { public static void main(String[] args) throws Exception { ServerSocket sc = new ServerSocket(9093); System.out.println("服务器启动成功!")...

disuihuo0872的博客 165

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java socket直接请求网络失败_JAVA高并发网络编程之BIO堵塞网络编程

上次说了网络编程都是有操作系统统一的API的,每个语言有对它的实现,这次来一起说说通过java原生的socket编程完成BIO的网络编程。(一)JAVA堵塞的网络应用服务端代码编写客户端代码编写多客户端的尝试下,多个BIOClient一个一个处理的,也只能一次处理一个,也不太符合网络编程的需求,没有数据会堵塞。(二)JAVA多线程的网络应用服务端多线程池代码客户端代码从服务端的代码入手来分析一波,...

weixin_42134117的博客 251

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java 网络编程解决并发量_Java高并发网络编程(二)BIO

一、阻塞服务器端public classBIOServer {public static void main(String[] args) throwsException {ServerSocket sc= new ServerSocket(9093);System.out.println("服务器启动成功!");while (!sc.isClosed()) {Socket request= sc...

weixin_36332642的博客 165

java aio bio nio性能_高并发编程系列:NIO、BIO、AIO的区别,及NIO的应用和框架选型...

谈到并发编程就不得不提到NIO,以及相关的Java NIO框架Netty等,并且在很多面试中也经常提到NIO和AIO、同步和异步、阻塞和非阻塞等的区别。我先简短介绍下几个NIO相关的概念,然后再谈NIO重点掌握内容,以及Java NIO框架选型。高并发编程系列AIO、BIO、NIO的区别IO模型主要分类:同步(synchronous) IO和异步(asynchronous) IO阻塞(blocki...

weixin_35669712的博客 312

Java架构师面试题——高并发编程系列NIO、BIO、AIO的区别,及NIO的应用和框架选型

谈到并发编程就不得不提到NIO,以及相关的Java NIO框架Netty等,并且在很多面试中也经常提到NIO和AIO、同步和异步、阻塞和非阻塞等的区别。我先简短介绍下几个NIO相关的概念,然后再谈NIO重点掌握内容,以及Java NIO框架选型。 AIO、BIO、NIO的区别 IO模型主要分类: 同步(synchronous) IO和异...

zhan_lang的博客 2873

BIO阻塞式网络编程

最近在跟james和tony老师学习JAVA,现在讲到了BIO阻塞式网络编程。在此谈一谈自己学完之后的理解。 BIO-阻塞IO的含义 同步异步生活案例: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。 而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,...

qq_33560415的博客 300

java 异步网络编程_java网络编程实战 - 基于BIO的伪异步、高并发、全双工、长链接持续消息IO的网络编程...

前言编程TCP是面向链接的通讯协议,经过三次握手创建链接,通信完成时要拆除链接,因为TCP是面向链接的因此只能用于端到端的通信。服务器TCP提供的是一种可靠的数据流服务,采用“带重传的确定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。网络若是IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到T...

weixin_42377695的博客 125

java实现网络IO高并发编程java NIO

NIO(,非阻塞 I/O)是 Java 在JDK 1.4中引入的一套新的 I/O API,旨在解决传统 I/O(即 BIO,阻塞 I/O)在高并发场景下的性能和扩展性不足的问题。

缘友一世的博客 1648

Java 高并发网络 IO 秘密:为什么 NIO 能支撑百万级连接?从 BIO 到 Netty 彻底搞懂网络编程!

先理解 IO。IO:Input / Output,即输入输出。程序通过网络进行数据接收和发送的过程。例如:浏览器发送HTTP请求↓服务器返回响应数据↓浏览器接收请求 = 输入(Input)返回数据 = 输出(Output)这整个过程:就是网络 IO。BIO:一个连接,一个线程。NIO:一个线程,监听多个连接。Netty:把NIO封装成生产级高性能网络框架。理解这三个概念,你就真正掌握了 Java 后端高并发网络编程的核心。

程序员夏洛的博客 442

JavaJDK源码中的IO与NIO:从BIO到Selector的多路复用技术演进

Spring Boot 自动配置源码 EnableAutoConfiguration 导入流程

2501_93831747的博客 856

HoRain云--Java NIO与BIO核心区别全解析

《Java I/O模型对比:BIO与NIO核心解析》 摘要:本文系统对比了Java中的BIO(阻塞I/O)与NIO(非阻塞I/O)模型。BIO采用"一连接一线程"的同步阻塞机制,适合低并发场景但资源消耗大;NIO通过Selector多路复用实现单线程管理数千连接,采用缓冲区批量读写提升效率,适合高并发实时系统。技术选型需权衡业务负载与开发成本:简单业务选BIO,高并发场景选NIO(如Netty框架)。文章还揭示了NIO空轮询等实践注意事项,为开发者提供全面的技术决策依据。

2401_86544677的博客 1121

Java网络编程原理与实践--从Socket到BIO再到NIO

本文首先介绍了Socket,给出了几个实例多角度的感受Socket使用,基于Socket的问题提出BIO,但是BIO只能解决部分问题,同时会有资源泄露问题,由此给出NIO的基本组件和使用。

Artisan_w 1854
上一篇: java单线程聊天室代码
下一篇: NIO(非阻塞IO)
ProgramBoy001
博客等级 码龄6年 3粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值