Netty学习之路(一)- 同步与异步IO

本文是Netty学习的第一部分,主要介绍了I/O的基础知识,包括Java早期I/O的问题,Linux的五种网络I/O模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O和异步I/O,重点讨论了各种模型的工作原理和优缺点。
摘要由CSDN通过智能技术生成

本篇博客主要是讲一些基础,记录我的学习过程,同时尝试养成写博客的习惯。内容基本来自Netty权威指南。。。。

I/O基础入门

在jdk1.4以前,java对i/o的支持并不完善,开发人员在开发高性能i/o时会遇到巨大的挑战与困难,主要问题如下:

  • 没有数据缓存区,i/o性能存在问题
  • 没有c或c++中Channel概念,只有输入输出流
  • 同步阻塞I/O(BIO)会导致通信线程长时间阻塞
  • 支持的字符集有限,硬件移植能力差

在java支持异步i/o之前,高性能服务端开发领域一直被c和c++占据,java同步i/o一直
被大家所诟病。

Linux网络I/O模型简介

linux将所有外部设备都看成文件来操作,无论是对文件还是套接字(socket)的读写都会返回一个描述符(指向内核中的一个结构体,结构体包括文件路径,数据区等属性)。应用程序要为因特网通信而创建一个套接字(socket)时,操作系统就返回一个小整数作为描述符(descriptor)来标识这个套接字。然后,应用程序以该描述符作为传递参数,通过调用函数来完成某种操作(例如通过网络传送数据或接收输入的数据)。

当应用程序要创建一个套接字时,操作系统就返回一个小整数作为描述符,应用程序则使用这个描述符来引用该套接字,然后需要I/O请求的应用程序请求操作系统打开一个文件。操作系统就创建一个文件描述符提供给应用程序访问文件。从应用程序的角度看,文件描述符是一个整

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值