1. Channel

channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层

常见的 Channel 有

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

2. Buffer

buffer 用来缓冲读写数据,常见的 buffer 有

  • ByteBuffer

    • MappedByteBuffer
    • DirectByteBuffer
    • HeapByteBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer
  • CharBuffer

3. Selector

3.1 服务器的设计演化

多线程版设计

缺点

  • 内存占用高
  • 线程上下文切换成本高
  • 只适合连接数少的场景

线程池版

缺点:

  • 阻塞模式下,线程仅能处理一个 socket 连接
  • 仅适合短连接场景

selector 版设计
selector 的作用就是配合一个线程来管理多个 channel,获取这些 channel 上发生的事件,这些 channel 工作在非阻塞模式下,不会让线程吊死在一个 channel 上。适合连接数特别多,但流量低的场景(low traffic)

调用 selector 的 select() 会阻塞直到 channel 发生了读写就绪事件,这些事件发生,select 方法就会返回这些事件交给 thread 来处理

最新文章

  1. SignalR系列续集[系列6:使用自己的连接ID]
  2. linux内核(kernel)版本号的意义
  3. 初探asp.net异步编程之await
  4. Unity Standard Assets 简介之 CrossPlatformInput
  5. 给li设置float浮动属性之后,无法撑开外层ul的问题。(原址:http://www.cnblogs.com/cielzhao/p/5781462.html)
  6. WebService 的一些基本概念
  7. Resilio(BtSync)搭建
  8. Java-输入输出
  9. __KERNEL__ macro
  10. Mybatis+SpringMVC的项目环境搭建
  11. Web- 一些标签样式
  12. VMVare虚拟机的异常处理---内部错误
  13. js简单固定table表头及css问题分析。
  14. Ajax获取Response头信息
  15. git 命令笔记
  16. 实现upnp ssdp来查找局域网内的其他节点
  17. AngularJS中处理多个promise
  18. Matlab 瑞利信道仿真
  19. CUDNN安装
  20. Go1.5正式版程序性能分析小积累,实验环境windows64

热门文章

  1. HTB Hack The Box -- Oopsiec
  2. charles 抓包修改app页面数据
  3. GRE隧道协议
  4. 在C#中将图像转换为BASE64
  5. SpringApplication启动-图解
  6. .NET5修改配置不重启自动生效
  7. golang 判断平台是32位还是64位
  8. 在excel中,截取电话号码后4位
  9. AS插件快速生成javabean
  10. Linux安装Cockpit监控服务