linux服务器开发人员必须要彻底理解的关于【Linux】IO的线程模型

IO线程模型知识 传统阻塞 I/O 服务模型 采用阻塞 IO 模式获取输入的数据, 每个连接都需要独立的线程完成数据的输入 , 业务处理和数据返回工作. 存在问题: 1. 当并发数很大,就会创建大量的线程,占用很大系统资源 2. 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在 read 操作,造成线程资源浪费 Reactor 模型 Reactor 模式,通过一个或多个输入同时传递给服务处理器的模式 , 服务器端程序处理传入的多个 请求,并将它们同步分派到相应的处理线程, 因此 React. 阅读详情

关于IO模型参考:【Linux】五种IO模型

reactor模型应用视频讲解:epoll原理剖析以及reactor模型应用

c/c++linux服务器开发高级架构师免费学习视频点击:C/C++Linux服务器开发高级架构师/Linux后台开发架构师

一、线程模型介绍

  为了应对高并发的服务器端开发,微软在2009年提出了一种更优雅地实现异步编程的方式Reactive Programming即反应式编程。随后其他技术紧随其后,比如ES6通过引入类似的异步编程方式等。

  在高性能的I/O设计中,有两个比较著名的模式Reactor(反应堆模式)和Proactor模式(前摄器模式),其中Reactor模式用于同步I/O,Proactor用于异步I/O操作。

  Reactor 模式称之为反应器模式,Reactor 模式使用event loop 阻塞等在io上,一但io可以读或写,通过分发器,遍历事件注册队列,将事件分发到指定注册的处理器。由应用的处理器来再将流读取到缓冲区或写入操作系统,完成io操作。

  Proctor 模式下读和写的方法是异步的,只需调用读和写即可。当有流可读取的时候,操作系统会将流传入read方法缓存区,并通知应用程序。对于写,当操作系统将writer 写入完毕时,操作系统会主动通知应用程序。

  proactor模式的Aio,流的读取和写入由操作系统完成,省去了遍历事件通知队列selector 的代价。

  Windows上的iocp实现了aio,linux目前只有基于epoll模拟实现的aio。

二、传统阻塞I/O服务模型

特点

  • 采用阻塞式I/O模型获取输入数据
  • 每个连接都需要独立的线程完成数据输入,业务处理,数据返回的完整操作

存在问题

  • 当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大
  • 连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在read操作上,造成线程资源浪费

三、Reactor模式

针对传统传统阻塞I/O服务模型的2个缺点,比较常见的有如下解决方案:

  • 基于I/O复用模型,多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象上等待,无需阻塞等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理
  • 基于线程池复用线程资源,不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务

I/O复用结合线程池,这就是Reactor模式基本设计思想

Reactor模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。 服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式,即I/O多了复用统一监听事件,收到事件后分发(Dispatch给某进程),是编写高性能网络服务器的必备技术之一

Reactor模式中有2个关键组成:

  • Reactor
    Reactor在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对IO事件做出反应。 它就像公司的电话接线员,它接听来自客户的电话并将线路转移到适当的联系人
  • Handlers
    处理程序执行I/O事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员。Reactor通过调度适当的处理程序来响应I/O事件,处理程序执行非阻塞操作

根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现:

  • 单Reactor单线程
  • 单Reactor多线程
  • 主从Reactor多线程

C/C++Linux服务器开发高级架构师学习视频 点击 linux服务器学习资料 获取,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,线程池,MongoDB,ZK,Linux内核,CDN,P2P,epoll,Docker,TCP/IP,协程,DPDK等等。

下面详细介绍这3种实现

3.1 单Reactor单线程

其中,select是前面I/O复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求,其他方案示意图类似

方案说明

  • Reactor对象通过select监控客户端请求事件,收到事件后通过dispatch进行分发
  • 如果是建立连接请求事件,则由Acceptor通过accept处理连接请求,然后创建一个Handler对象处理连接完成后的后续业务处理
  • 如果不是建立连接事件,则Reactor会分发调用连接对应的Handler来响应
  • Handler会完成read->业务处理->send的完整业务流程

优点
模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成

缺点

  • 性能问题:只有一个线程,无法完全发挥多核CPU的性能
    Handler在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈
  • 可靠性问题:线程意外跑飞,或者进入死循环,会导致整个系统通信模块不可用,不能接收和处理外部消息,造成节点故障

使用场景
客户端的数量有限,业务处理非常快速,比如Redis,业务处理的时间复杂度O(1)

3.2 单Reactor多线程

方案说明

  • Reactor对象通过select监控客户端请求事件,收到事件后通过dispatch进行分发
  • 如果是建立连接请求事件,则由Acceptor通过accept处理连接请求,然后创建一个Handler对象处理连接完成后的续各种事件
  • 如果不是建立连接事件,则Reactor会分发调用连接对应的Handler来响应
  • Handler只负责响应事件,不做具体业务处理,通过read读取数据后,会分发给后面的Worker线程池进行业务处理
  • Worker线程池会分配独立的线程完成真正的业务处理,如何将响应结果发给Handler进行处理
  • Handler收到响应结果后通过send将响应结果返回给client

优点
可以充分利用多核CPU的处理能力

缺点

  • 多线程数据共享和访问比较复杂
  • Reactor承担所有事件的监听和响应,在单线程中运行,高并发场景下容易成为性能瓶颈

3.3 主从Reactor多线程

针对单Reactor多线程模型中,Reactor在单线程中运行,高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行

方案说明

  • Reactor主线程MainReactor对象通过select监控建立连接事件,收到事件后通过Acceptor接收,处理建立连接事件
  • Accepto处理建立连接事件后,MainReactor将连接分配Reactor子线程给SubReactor进行处理
  • SubReactor将连接加入连接队列进行监听,并创建一个Handler用于处理各种连接事件
  • 当有新的事件发生时,SubReactor会调用连接对应的Handler进行响应
  • Handler通过read读取数据后,会分发给后面的Worker线程池进行业务处理
  • Worker线程池会分配独立的线程完成真正的业务处理,如何将响应结果发给Handler进行处理
  • Handler收到响应结果后通过send将响应结果返回给client

优点

  • 父线程与子线程的数据交互简单职责明确,父线程只需要接收新连接,子线程完成后续的业务处理
  • 父线程与子线程的数据交互简单,Reactor主线程只需要把新连接传给子线程,子线程无需返回数据

这种模型在许多项目中广泛使用,包括Nginx主从Reactor多进程模型,Memcached主从多线程,Netty主从多线程模型的支持

3.4 总结

3种模式可以用个比喻来理解:
餐厅常常雇佣接待员负责迎接顾客,当顾客入坐后,侍应生专门为这张桌子服务

  • 单Reactor单线程
    接待员和侍应生是同一个人,全程为顾客服务
  • 单Reactor多线程
    1个接待员,多个侍应生,接待员只负责接待
  • 主从Reactor多线程
    多个接待员,多个侍应生

Reactor模式具有如下的优点:

  • 响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的
  • 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
  • 可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源
  • 可复用性,Reactor模型本身与具体事件处理逻辑无关,具有很高的复用性

3.3 Proactor模型

在Reactor模式中,Reactor等待某个事件或者可应用或个操作的状态发生(比如文件描述符可读写,或者是socket可读写),然后把这个事件传给事先注册的Handler(事件处理函数或者回调函数),由后者来做实际的读写操作,其中的读写操作都需要应用程序同步操作,所以Reactor是非阻塞同步网络模型。如果把I/O操作改为异步,即交给操作系统来完成就能进一步提升性能,这就是异步网络模型Proactor

Proactor是和异步I/O相关的,详细方案如下:

  • ProactorInitiator创建Proactor和Handler对象,并将Proactor和Handler都通过AsyOptProcessor(Asynchronous Operation Processor)注册到内核
  • AsyOptProcessor处理注册请求,并处理I/O操作
  • AsyOptProcessor完成I/O操作后通知Proactor
  • Proactor根据不同的事件类型回调不同的Handler进行业务处理
  • Handler完成业务处理

可以看出Proactor和Reactor的区别:Reactor是在事件发生时就通知事先注册的事件(读写在应用程序线程中处理完成);Proactor是在事件发生时基于异步I/O完成读写操作(由内核完成),待I/O操作完成后才回调应用程序的处理器来处理进行业务处理

理论上Proactor比Reactor效率更高,异步I/O更加充分发挥DMA(Direct Memory Access,直接内存存取)的优势,但是有如下缺点:

  • 编程复杂性
    由于异步操作流程的事件的初始化和事件完成在时间和空间上都是相互分离的,因此开发异步应用程序更加复杂。应用程序还可能因为反向的流控而变得更加难以Debug
  • 内存使用
    缓冲区在读或写操作的时间段内必须保持住,可能造成持续的不确定性,并且每个并发操作都要求有独立的缓存,相比Reactor模式,在socket已经准备好读或写前,是不要求开辟缓存的
  • 操作系统支持
    Windows 下通过 IOCP 实现了真正的异步 I/O,而在 Linux 系统下,Linux2.6才引入,目前异步I/O还不完善

因此在Linux下实现高并发网络编程都是以Reactor模型为主

五、Netty核心技术之线程模型讲解 一、线程模型基本介绍      不同的线程模式,对程序的性能有很大的影响,为了搞清Netty线程模式,我们来系统的讲解下各个线程模式,最后看看Netty线程模型有什么优越性。      目前存在的线程模型有: 传统阻塞IO服务模型 Reactor模式      根据Reator的数量和处理资源线程池线程的数量不同,有三种典型的实现 单Reactor 单线 阅读详情

相关推荐

Java 线程模型、线程池原理与最佳实践

本文系统总结了Java线程的六种创建方式及其演进,从基础到高级依次为:继承Thread类、实现Runnable接口、实现Callable接口、线程池(ExecutorService)、CompletableFuture异步编程和Java19虚拟线程。重点分析了线程池的核心原理与最佳实践,包括ThreadPoolExecutor参数配置、四种拒绝策略及监控调优方法。针对生产环境,提供了支付场景下CountDownLatch、Semaphore、CyclicBarrier的典型应用示例,并详细讲解了wait/n

bestlove12345的博客 822

线程的三种实现模型

一.基本概念 线程是处理器调度和分配的基本单位,进程则作为资源拥有的基本单位。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。线程是进程内部的一个执行单元。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。 用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。 无论语言层面何种并发模型,到了操作系统层面,一定是以线程的形态存在的。而操作系统根据资源访问权限的不同,体系架构可分为用户空间和内核空间;内核空间主要操作访问CPU资源、I/O资源、内存

guoafite的博客 4945

Linux 5种IO模型对比:从阻塞IO到异步IO,3张图看懂核心差异与适用场景

本文深入解析Linux中的5种IO模型,包括阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,通过对比表格和流程图展示其核心差异与适用场景。特别针对高并发场景,提供选型建议和性能优化关键点,帮助开发者理解《Unix网络编程》中的IO模型理论并应用于实战。

cojm55771的博客 559

多线程常用的5种-线程模型

在处理业务的时候,有时候需要根据情况使用不同的线程处理模型来处理业务逻辑,这里演示一下常见的线程模型使用技巧。 1、Future模型   前面的章节中提到过Future模型,该模型通常在使用的时候需要结合Callable接口配合使用。Future:未来的、将来的,再结合Callable大概可以明白其功能。   Future是把结果放在将来获取,当前主线程并不急于获取处理结果。允许子线程先进行处理一段时间,处理结束之后就把结果保存下来,当主线程需要使用的时候再向子线程索取。   Callable是类似

luzhensmart的专栏 4315

深入解析Linux IO多路复用:从select到epoll的高并发网络编程实践

IO多路复用是操作系统提供的一种高效I/O事件通知机制,其核心原理在于允许单个进程或线程同时监视多个文件描述符(如网络套接字)的状态变化。通过将文件描述符集合的管理委托给内核,并在事件就绪时接收通知,该技术能够将传统阻塞I/O模型中的“一对一”服务模式转变为“一对多”的监控模式,从而在资源利用率和并发处理能力上实现质的飞跃。其技术价值在于,它能够以极少的系统线程支撑海量的并发连接,显著降低上下文切换和内存开销,成为构建高性能、可扩展网络服务的基石。这一技术广泛应用于Web服务器、即时通讯、游戏服务器、金融交

weixin_34380948的博客 323

医学影像弹性形变处理

这段代码的主要流程是:读取 DICOM 医学影像,尝试使用 MONAI 进行弹性形变(根据版本适配),如果失败则使用 OpenCV 实现,最后可视化并保存处理结果。这样可以在不同环境下灵活处理医学影像的弹性形变需求。后面会写一篇解释弹性变形方法的短文。

wh_xia_jun的专栏 780

Linux 的 IO 通信 以及 Reactor 线程模型浅析

目录 随着计算机硬件性能不断提高,服务器 CPU 的核数越来越越多,为了充分利用多核 CPU 的处理能力,提升系统的处理效率和并发性能,多线程并发编程越来越显得重要。无论是 C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模式进行设计和开发,Reactor 模式基于事件驱动,特别适合处理海量的 I/O 事件,今天我们就简单聊聊 Reactor 线程模型,主要内容分为以下几个部分: 经典的 I/O 通信模型; Reactor 线程模型详述; Reactor 线程模型几种模式;

Linuxhus的博客 283

新手必看!Stata工具变量分析中的三大陷阱:如何正确解读LM统计量、CDW检验和Hansen J值

本文深度解析Stata工具变量分析中的三大核心检验:不可识别检验、弱IV检验和过度识别检验,帮助新手避开常见陷阱。详细解读LM统计量、CDW检验和Hansen J值的正确使用方法,提供实战案例和Stata操作指南,确保研究结论的可靠性。

weixin_29231027的博客 574

环形IO模型:io_uring

环形IO模型:io_uring

安静的软件工程师 1096

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

机器视觉应用工程师职位深度解析与面试指南

广东奥普特科技招聘机器视觉应用工程师,要求大专以上理工科专业背景,熟悉C/C++或PLC编程,具备自动化设备调试经验。岗位职责包括视觉项目方案评估、系统安装调试、售后技术支持及异常处理,需接受外派出差。该职位面向专业对口的应届生或实习生,强调动手能力、沟通技巧和吃苦耐劳精神。机器视觉工程师需掌握图像处理算法、硬件配置等核心技术,在工业自动化领域具有良好发展前景。求职者应注重编程能力和实践经验的积累,以胜任这一技术密集型岗位。

郑伟强dev的专栏 435

探秘Netty1:从IO模型谈到Reactor、Proactor线程模型

目录 随着计算机硬件性能不断提高,服务器 CPU 的核数越来越越多,为了充分利用多核 CPU 的处理能力,提升系统的处理效率和并发性能,多线程并发编程越来越显得重要。无论是 C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模式进行设计和开发,Reactor 模式基于事件驱动,特别适合处理海量的 I/O 事件,今天我们就简单聊聊 Reactor 线程模型,主要内容分为以下几...

Java技术江湖 2025

26. 如何给 SAP BTP Cloud Foundry 环境分配运行时内存

摘要:本文解答了SAP BTP Cloud Foundry环境中Space可用内存为0MB的问题。指出Space内存配额取决于Org配额分配,其计算方式为Org总配额减去所有运行中应用实例的内存预留总和。详细解释了SAP BTP的资源分配层级(Global account→Subaccount→Environment→Org→Space),并说明如何通过Global account的Entity Assignments查看Memory Plan配额分配(以GB为单位)。最后建议遇到问题的用户检查Subacc

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1269

nio线程模型

一、基于BIO下的线程处理模式 这种处理模型是基于阻塞IO进行的,,阻塞IO会阻塞每一个IO操作,直到事件就绪,下面来看下阻塞IO下的服务端线程模型: https://img2018.cnblogs.com/blog/1569484/201903/1569484-20190325152937620-1008938753.png 如上图所示,该线程模型基于阻塞IO模型实现,针对每个请求都需要抽出来一个线程进行处理读入数据、业务处理数据、返回响应结果给客户端,这个过程中读、写操作均会阻塞,且跟业务处理串行执行,

qq_24510225的博客 489

面试提问:数据开发中如何通过指标拆解来指导SQL编写?(附拆解模板)

摘要:指标拆解是一种高效的数据分析方法,通过将复杂业务指标分解为可执行的原子指标,指导SQL查询的编写。核心步骤包括:明确指标定义、拆解原子指标、定位数据源、确定分组维度、构建中间表。文章提供了指标拆解模板和实际案例(如用户留存率计算),并总结了拆解带来的5大好处:逻辑清晰、易于调试、可复用、降低错误率、便于协作。最后强调"一定义、二拆解、三定位、四分步、五合并"的口诀,适用于数仓开发、BI报表等场景。

石榴姐yyds 268

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

本项目旨在分析往届世界杯比赛数据,找出规律,最后使用决策树算法构建世界杯比赛预测模型,给出两个球队即可预测胜率,可以给爱看球的小伙伴提供一个参考。本次实验我们使用了2018年及其之前的世界杯比赛数据,通过建立决策树模型,模型准确率为82%,接着我们使用该模型预测了2022年世界杯的5场半决赛及决赛,模型准确率也是接近80%的,说明模型效果还是很不错的。心得与体会:通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。

m0_64336780的博客 1万+

深入理解Linux高性能网络架构的那些事!

1. 落寞的小黑 上周北京很冷,周五晚上大白下班奔地铁站,收到了好基友小黑的微信: 于是大白掉头扫了个单车奔五道口了,小黑靠谱地选了个不错的位置。 小黑: 你今天下班挺早呀! 大白: 就咱这觉悟,心里有工作,哪里都是办公桌,不要拘泥于形式嘛。 明显能感觉得到小黑哥最近好像比较累,之前眼里bulingbuling闪的光是看不到了。 大白: 下午去面的哪家?啥岗位?咋样? 小黑: 是一家做自动驾驶的创业公司,网站是看团队介绍还不错,就去看看了,这次没咋准备,很多问题其实都熟悉,但

wubaohu1314的博客 296

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。但在芯片规格书中为什么只见到HBM模型与CDM模型,却没有看到MM模型的数据?

一点硬件 452

如何高效掌握muduo:C++11多线程网络库的核心线程模型与优化实践指南

muduo是一个基于C++11的事件驱动型多线程Linux服务器网络库,它以高效的线程模型和卓越的性能表现,成为众多高性能服务器开发的理想选择。本文将深入剖析muduo的核心架构,帮助开发者快速理解其线程模型设计与优化实践。 ## 📚 muduo核心架构概览 muduo网络库采用了经典的Reactor模式,将网络事件处理与业务逻辑解耦,实现了高效的事件驱动编程。其核心模块主要分布在以下目录:

gitblog_00554的博客 904

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

理解Linux高性能网络架构的那些事

通过本文你将会了解到以下内容: IO事件和IO复用 线程模型和事件驱动模型的架构 基于事件驱动的Reactor模式详解 同步IO和异步IO简介 1. IO事件和IO复用 1.1 什么是IO事件 IO指的是输入Input/输出Output,但是从汉语角度来说,出和入是相对的,所以我们需要个参照物。 这里我们的参照物选择为程序运行时的主存储空间,外部通常包括网卡、磁盘等。 有了上述的设定理解起来就方便多了,我们来一起看下: IO的本质是数据的流动,数据可以从网

~~ LINUX ~~ 328

IMSL CNL 7.0.0 (x86-64)Crack

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

boost asio 性能_图解|深入理解Linux高性能网络架构的那些事

1. 落寞的小黑上周北京很冷,周五晚上大白下班奔地铁站,收到了好基友小黑的微信:于是大白掉头扫了个单车奔五道口了,小黑靠谱地选了个不错的位置。小黑: 你今天下班挺早呀!大白: 就咱这觉悟,心里有工作,哪里都是办公桌,不要拘泥于形式嘛。明显能感觉得到小黑哥最近好像比较累,之前眼里bulingbuling闪的光是看不到了。大白: 下午去面的哪家?啥岗位?咋样?小黑: 是一家做自动驾驶的创业公司,网站是...

weixin_29767773的博客 594

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

图解|深入理解Linux高性能网络架构的那些事

1. 落寞的小黑上周北京很冷,周五晚上大白下班奔地铁站,收到了好基友小黑的微信:于是大白掉头扫了个单车奔五道口了,小黑靠谱地选了个不错的位置。小黑: 你今天下班挺早呀!大白: 就咱这觉悟...

架构师小秘圈 709

多线程服务器分析——Reactor线程模型和性能分析(序章)

最近在拜读陈硕的《Linux多线程服务端编程》[1],目前读到第3章,主要讲常用的服务端的编程模型,其中提到了很多线程模型以及与性能相关的分析,读了之后想实践一下书中提到的理论,也顺便复习一下网络编程的相关内容,于是搜索了很多关于Reactor和Proactor相关的内容,对于里面概念的讲述是可以理解的,但是如果具象化到代码中还是无法第一时间在脑中形成概念。因此想结合书中第三章的讲解,捋一捋多线程服务器的模型以及性能分析,通过C++代码逐步弄明白各种服务端模型和IO模型。

weixin_43977379的博客 1026

图解|深入理解Linux高性能网络架构的那些事(并发消息处理模型)

1. 落寞的小黑 上周北京很冷,周五晚上大白下班奔地铁站,收到了好基友小黑的微信: 于是大白掉头扫了个单车奔五道口了,小黑靠谱地选了个不错的位置。 小黑: 你今天下班挺早呀! 大白: 就咱这觉悟,心里有工作,哪里都是办公桌,不要拘泥于形式嘛。 明显能感觉得到小黑哥最近好像比较累,之前眼里bulingbuling闪的光是看不到了。 大白: 下午去面的哪家?啥岗位?咋样? 小黑: 是一家做自动驾驶的创业公司,网站是看团队介绍还不错,就去看看了,这次没咋准备,很多问题其实都熟.

WXXGoodJob的博客 1111

Netty(一)深入Hotspot源码与Linux内核理解NIO与Epoll

在Java中,提供了一些关于使用IO的API,可以供开发者来读写外部数据和文件,我们称这些API为Java IO。IO是Java中比较重要知识点,且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能,目前有三种IO共存;分别是BIO、NIO和AIO。学习完这三种IO之后会去学习Netty,本人也是抱着学习的目标来写这些文章的。如果有任何不对的地方还望指正Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。

weixin_43691942的博客 1210
上一篇: HTTPS学习之教你弄透到底什么是HTTPS
下一篇: P2P通信原理与实现(C++),NAT,网络穿透原理
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值