关于I/O模型及javaNIO相关概念笔记

I/O模型详解
本文深入解析I/O模型中的核心概念,包括阻塞与非阻塞、同步与异步的区别,并探讨了不同操作系统如何处理I/O请求,以及这些机制对应用程序性能的影响。

提到I/O模型,会有几个概念:

 

  • 阻塞I/O
  • 非阻塞I/O
  • 同步I/O
  • 异步I/O

这里会有四种组合:

 

  • 同步阻塞I/O
  • 同步非阻塞I/O
  • 异步阻塞I/O
  • 异步非阻塞I/O

在解释这些概念之前首先需要先明确一些问题。

 

  1. 对于I/O操作一共参与方除了《应用程序》,《I/O对象,比如file,socket》,还有《操作系统

在这里需要说明操作系统扮演着很重要的元素。因为很多种实现中需要操作系统作为“中介方”-提供服务

 

  1. 不同操作系统在扮演“中介方”的具体实现上可能有些不同,但是并不影响上述概念。

 

一个应用发出了一次I/O操作后(read/write),其实接下去有两件事情需要注意:

 

  1. 由谁去检查是否可以进行操作了
  2. 在发出操作至确认可以去操作的那段时间中应用可以做什么

OK,到这里就比较清楚了。
第一个问题,其实就是表明了该套系统是同步还是异步的。
  • 如果是应用自己负责去检查(通常是轮训)则是同步的。
  • 而如果是系统负责通知(多路复用,信号驱动)则是异步的。
在参考帖子里看到一个比喻,我觉得很合适,便是去银行办业务,排队。如果没有任何机制,用户(应用)需要不断的去观察队伍是不是空了,可以进行业务操作了(I/O操作),虽然这时还可以进行其他操作(这个就是非阻塞了),但是可想而知这个效率了。
实际上,银行提供了一个号码纸。当轮到指定用户后,银行会广播通知(这个其实就是多路复用)或者直接通知那个指定的用户(信号驱动),这样便是异步的。在采用这种机制的系统中,应用便从监视中解放了出来,可以去做其他事情。此时应用就是非阻塞的,但是应用仍然可以采用阻塞模式。

第二个问题,就是判断是否是阻塞操作的
在同步I/O中,如果既要负责是否可以操作,又要去做其他事情,这边是非阻塞模式,但通常效率很低,所以一般都是阻塞线程了。

对于异步I/O中,通常应用在发出需要I/O操作后,有系统负责通知应用是否可以进行操作了。所以应用肯定是可以去做其他事情的,也就是非阻塞的。但是应用可以选择工作在阻塞模式下。

总结一下:
同步模式下:由于应用需要检查是否可以进行操作,是否往往就是阻塞的。

异步模式下:由于检查是否可以进行操作有系统负责了,所以应用便可以选择是在阻塞还是飞阻塞模式下工作了。

 

这里一个关键问题是系统是如何负责通知应用的,这个与操作系统底层有比较紧密的联系。比如linux提供select和epoll函数,及信号量机制。但是这些还不是真正的异步。

 

而接下来,无论是linxu还是windows都会支持真正的异步模式,对于java这个特性需要jdk7才能够支持了。

 

 

 

 

参考帖子:

http://blog.youkuaiyun.com/kangojian/archive/2010/07/03/5710977.aspx

http://www.iteye.com/topic/868702#1847693

http://www.ibm.com/developerworks/cn/linux/l-async/

 

基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文提出了一种基于非支配排序的蜣螂优化算法(NSDBO),用于求解微电网多目标优化调度问题。该方法结合非支配排序机制,提升了传统蜣螂优化算法在处理多目标问题时的收敛性和分布性,有效解决了微电网调度中经济成本、碳排放、能源利用率等多个相互冲突目标的优化难题。研究构建了包含风、光、储能等多种分布式能源的微电网模型,并通过Matlab代码实现算法仿真,验证了NSDBO在寻找帕累托最优解集方面的优越性能,相较于其他多目标优化算法表现出更强的搜索能力和稳定性。; 适合人群:具备一定电力系统或优化算法基础,从事新能源、微电网、智能优化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网能量管理系统的多目标优化调度设计;②作为新型智能优化算法的研究与改进基础,用于解决复杂的多目标工程优化问题;③帮助理解非支配排序机制在进化算法中的集成方法及其在实际系统中的仿真实现。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注非支配排序、拥挤度计算和蜣螂行为模拟的结合方式,并可通过替换目标函数或系统参数进行扩展实验,以掌握算法的适应性与调参技巧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值