前言
本文将记载一些我学习到和 IO 相关的知识,但不意味着所有我学习到和 IO 相关的知识我都会整理进来。本文一般是描述服务器的 IO ,所以经常会出现一些和服务器相关的术语。
本文会根据本人的学习修修改改。
Socket
Socket最频繁的叫法应该就是套接字了,我之前也是这么叫的,但是在了解一些以后,我觉得叫它四元组会更加直观一些。四元组,即 IP1 + 端口1 + IP2 + 端口2。即一对IP + 端口套上另一对 IP + 端口,表示通信的发送方以及接收方的地址。在同一个网络中 IP + 端口唯一标识了一个进程。
相关问题
- 端口的数量?
- 由于端口是双字节的,所以最大端口数为65536,即0 - 65536,但是 0 一般不用,所以一般说 65535
- 如果本地只有一个IP,那么和IP 为 122.122.122.122,端口为80的服务器能创建多少个连接?
- 65535
- 只要 Socket 四元组中的四元任意一个不一致,那么这个 Socket 就是正确的,可使用的。
BIO
BIO 即传统的 IO 模型,这里面的 B 是 Blocking ,也就是阻塞的。
IO 在进行一些操作的时候,会进行阻塞,例如服务器等待其他人的连接,等待连接者发送数据。
缺点
因为某些操作是阻塞的,所以单线程肯定是不行了,不然你怎么在等待连接的时候接受已连接者发送来的数据,这时候就需要用到多线程,给每一个可能会发生阻塞的操作一个新的进程。
如果连接者过多,那么会创建很多线程,服务器会浪费很多资源在线程切换上。
NIO
NIO有两种,一种是 Java 里面的 NIO,这时候的 NIO 的 N 代表的是 New ,也就是 New IO,Java 里面一套全新的 IO 框架。还有一种是操作系统的 NIO,这时的 N 代表是 Non - Blocking,也就是非阻塞 IO。
非阻塞 IO ,也就是 IO 在执行操作的时候,不会发生阻塞,有数据就拿,没数据就走(会有无数据标志),主要是通过缓冲区和多路复用器实现。
NIO 相关的知识很多,这里只是最简单的描述一下功能,更详细的会在我深入学习后再写一篇文章来记录。