美文网首页
持续精进_java语言3

持续精进_java语言3

作者: 兮兮码字的地方 | 来源:发表于2018-11-21 23:32 被阅读16次

一,IO

java.io 包,提供了通过输入输出流的方式来实现网络通信。

很多时候,java.net 下面提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnection 也归类到同步阻塞 IO 类库,因为网络通信同样是 IO 行为。

传统的IO流在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序

java.io 包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。

持续精进_java语言3

二,两组概念

同步或异步(synchronous/asynchronous)。

简单来说,同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系。

阻塞与非阻塞(blocking/non-blocking)。

在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如 ServerSocket 新连接建立完毕,或数据读取、写入操作完成;而非阻塞则是不管 IO 操作是否结束,直接返回,相应操作在后台继续处理。

三,传统IO弊端

Java 中启动或者销毁一个线程是有明显开销的,为避免频繁创建、销毁线程的开销,我们可以维护一个固定大小的线程池,来管理工作线程。如下图这样的模式。

持续精进_java语言3

如果连接数并不是非常多,只有最多几百个连接的普通应用,这种模式往往可以工作的很好。但是,如果连接数量急剧上升,这种实现方式就无法很好地工作了,因为线程上下文切换开销会在高并发时变得很明显,这是同步阻塞方式的低扩展性劣势。

三,NIO

NIO 引入的多路复用机制,实现同步非阻塞

如下图这样的模式。

持续精进_java语言3

传统IO 需要多线程以实现多任务处理。而 NIO 则是利用了单线程轮询事件的机制,通过高效地定位就绪的 Channel,来决定做什么,仅仅 select 阶段是阻塞的,可以有效避免大量客户端连接时,频繁线程切换带来的问题,应用的扩展能力有了非常大的提高。

相关文章

  • 持续精进_java语言3

    一,IO java.io 包,提供了通过输入输出流的方式来实现网络通信。 很多时候,java.net 下面提供的部...

  • 持续精进_java语言 1

    一,java的“一次编译、到处运行”具体涵义 说的是Java语言跨平台的特性(可在不同的操作系统中运行),是依靠J...

  • 持续精进_java语言2

    1 String字符串 在Java 9之前,字符串是使用 char 数组来存数据的,这样非常直接。(java开始改...

  • 持续精进_java语言4

    一,面向对象 基本三要素:封装、继承、多态。 封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。 继承...

  • 彭晋辉:如何理解六个精进

    《活法》拆解(023) I:用自己的语言重述信息: 六个精进,1,持续努力,2,戒骄戒躁,3,每天反省,4,感恩生...

  • 持续精进3

    【姓名】 张书 【公司】浙江鲍斯高服饰有限公司 【组别】448期谦虚二组学员 472期反省一组志工 【...

  • Jenkins+kubernetes(第1节)

    Jenkins 特性 开源java语言开发持续集成,持续部署工具 易于安装:yum/docker/war 消息通知...

  • 如何理解六个精进《活法》拆解(023)

    I:用自己的语言重述信息: 六个精进,1,持续努力,2,戒骄戒躁,3,每天反省,4,感恩生命,5,行善积德,6,积...

  • java学习路径

    一、java基础知识 (30天) 1. 语言基础, java基础,环境变量 2. 语言基础, 进制转换 3. 语言...

  • 持续精进3/730

    今天是持续精进的第3天,每天都在学习,不断理顺自己的思路,用切实可行的办法解决自己的问题。 一直以来,自己存在的问...

网友评论

      本文标题:持续精进_java语言3

      本文链接:https://www.haomeiwen.com/subject/awxkqqtx.html