深入理解什么是端口(port)

深入理解什么是端口(port)

 

每当看到有人的简历上写着熟悉 tcp/ip, http 等协议时, 我就忍不住问问他们: 你给我说说, 端口是啥吧! 可惜, 很少有人能说得让人满意... 所以这次就来谈谈端口(port), 这个熟悉的陌生人.

在此过程中, 还会谈谈间接层, naming service 等概念, IoC, 依赖倒置等原则以及 TCP 协议的一些重点知识.

常见端口

在我们的日常开发过程中, 特别是后端的开发人员, 即便他没有真正理解端口的细节, 他还是会听过见过各类的端口, 这个东西几乎无处不在, 比如:

  • mysql 缺省用的 3306 端口,
  • redis 的 6379 端口,
  • tomcat 默认用的 8080 端口,
  • ssh 用的 22 端口,
  • 等等...

当然我们最关注的还是 web 相关的端口, 涉及的主要为 80 和 443 两个端口, 下面就来重点说说.

端口是必须的吗?

在本地 web 开发调试过程中, 我们可能都碰到过端口, 比如或许是/最著名的 8080 端口, 一般我们会这样去访问本地的 web 程序:

localhost:8080

但一旦 web 程序部署到了正式的网站中, 端口似乎就消失了, 正式的网址中就不需要端口了吗? 答案是否定的, 在这里起作用的是缺省值.

比如你访问我的网站: https://xiaogd.net, 这个 url 中似乎没有端口, 但其实是有的, 它有一个默认值 443, 所以完整的形式实际是这样的:

https://xiaogd.net:443.

你可以通过 Chrome 的开发人员调试工具看到这一点:

深入理解什么是端口(port)

 

可以看到, ip 地址后面跟着一个 443

如果你输入一个错误的端口, 比如 80, 像这样: https://xiaogd.net:80, 结果就是无法访问.

但是如果你改成 http://xiaogd.net:80, 它又可以访问了.

注意, 因为我服务器后台配置了 http 自动跳转 https 的 301 重定向, 所以最终浏览器会再次跳转到 https://xiaogd.net:443.

注意勾选 'Preserve log' 以保留日志, 可以看到第一个 80 端口的请求会被响应一个 301 跳转, 并指示跳转目标, 也即是 Location 字段中的 https 请求, 浏览器接收此跳转指示并重新发起 https 请求, 也即是图中第二个 xiaogd.net 的请求. 所以地址栏最终还是会变成 https 的, 特此说明.

此时如果你输入 http://xiaogd.net:443, 它又不能访问了...

那么原因是什么呢? 你找到规律了没有?

注意一个是 http, 一个是 https.

协议的缺省端口

当你没有显式的在 url 中输入端口时, 浏览器实际上会根据所用的协议来为你指定一个缺省端口:

  • 如果是 http 协议, 就使用 80 端口
  • 如果是 https 协议, 就使用 443 端口

如果你自己输入端口呢? 那就用你输入的端口, 你输入啥就是啥, 输错了, 访问不了那就是你的责任了, 谁让你瞎搞来着?

本来不用你劳神的, 你偏要脱裤子放屁, 搞不好自然就是画蛇添足, 弄巧成拙了.

比如上面的用了 http 却输入了 443, 或者用了 https 却输入了 80, 就无法成功访问了.

另外, 如果你胡乱地输入一个比如 9527, http://xiaogd.net:9527, 自然也是无法访问的, 原因也很简单, 因为我的服务器上根本没有在 9527 端口上进行监听.

即便我有在 9527 端口上监听, 提供的也未必是 web 服务, 使用的协议可能既不是 http, 也不是 https, 所以你用浏览器试图去访问也可能会碰壁的.

当然了, 我是完全可以在服务器上的 9527 端口上再部署一个 web 服务的, 比如放一个 apache 或 tomcat server 之类的 web server 监听在那个端口上, 再放通防火墙, 安全组之类的, 也是可以访问的. 只是我没有这么去做而已.

那么为啥大家都不在那些奇奇怪怪的端口上提供 web 服务呢? 原因其实也很简单, 为了方便用户, 同时也减轻了用户的认知负担.

其实关于用户, 你只要记住两点就好了:

  1. 用户是傻瓜
  2. 用户是懒汉

深刻地理解了这一点, 你才可能成为一个好的程序员(包括但不限于产品经理, 设计师...)

其实呀, 何止了省略了端口呀, 你看看现在的地址栏, 不但 http, https 这些协议省了, 最末尾的斜杠 / 省了, 甚至连 www 都省了...

是的, 我也帮你们省了 www, 事实上你通过 https://www.xiaogd.net/ 也能访问到, 但如果通过 https://xiaogd.net/ 就能访问到, 又何苦去再去录入三个达不溜呢?

必须得承认, 缺省的存在是有很大的帮助的, 这其实是进步; 但另一方面, 这些缺省有时也会给不明就里的开发人员带来了一些困惑, 好像端口不是必要的, 但其实不是这样的.

为什么需要端口?

那为什么一定要端口这个东西呢? 它到底起了什么作用, 想必很多同学想要了解, 下面就来说说为什么, 而一个首先需要了解的概念就是进程间通讯(所谓的 IPC(inter-process communication)

进程间通讯(IPC)

你在浏览器地址栏输入某个网站的域名, 然后回车, 就生成了一次请求, 然后服务器响应你的请求, 浏览器再把结果渲染出来, 你就能最终看到到一个网页.

如果你曾经 ping 过一个域名, 比如你现在 ping 我的域名 xiaogd.net, 你就能得到一个 ip 地址, 118.89.55.54:

深入理解什么是端口(port)

 

有了 ip, 浏览器自然就能找到我的主机, 但还是有个问题, 我的主机上运行着好多的进程, 好多的服务, 除了最常见的 web 服务, 我可能还有 ftp 服务, mysql 服务等等不一而足.

简单地讲, 如果一个请求只有 ip 地址这一信息, 操作系统将不知道把这个请求交给哪个进程去处理, 如果是你来设计整个系统, 你想象一下, 是不是这样?

如果你仅仅是输入域名, 经过 DNS 解析后, 只能得到一个 IP 地址.

所谓的一次请求, 从一个比较底层的角度去看, 就是一次进程间的通讯.

深入理解什么是端口(port)

 

它可以是 navicat 客户端与 mysql 数据库服务的一次通讯, 也可以是 winScp 客户端与 vsftpd FTP 服务的一次通讯等等.

以上面的具体为例, 可以说就是 Chrome 浏览器这个本地操作系统上的进程与我的服务器上的一个叫做 Nginx 的进程间的一次通讯.

那么, 所谓的端口, 其实可以简单地视作为进程 ID.

当然, 它与进程 ID 还是有不同的, 下面再分析, 或者目前你可以认为端口就是进程 ID 的影子.

也即是说, 如果仅有域名(ip), 是无法定位到一个进程的, 通讯的发起方不但需要给出 ip, 还需要给出端口, 只有这样, 服务器才能知道由哪个进程去响应.

端口, 一个间接层

那么问题又来了, 为什么引入端口, 而不是直接使用进程 ID 呢? 这个原因想想也不难明白, 大概有这么几点原因:

  1. 作为客户端无法知道服务端对应进程的 ID
  2. 服务端对应进程重启后 ID 会改变
  3. 一个网站的 web 进程 ID 是这个, 另一个网站的可能又是另一个

自然, 原因是很多的, 我也是随便的列举了一些, 你或许还能想到更多. 而为了解决这些个问题, 就引入了端口这一间接层(indirection).

计算机世界里有一句名言: 任何计算机问题均可通过增加一个间接(indirection)层来解决.(Any problem in computer science can be solved with another layer of indirection. -- David Wheeler)

这个名言其实还有后面一句: But what usually will create another problem.(但通常会带来另一个问题)

这里所谓另一个问题, 比如它会使得层次结构复杂化, 交互效率下降等等. 当然了, 这就是架构师们要去权衡的问题了, 很多时候, 架构就是关于平衡的艺术. 打死都不肯引入任何的间接层, 这是一个极端; 而一上来就引入好多个间接层, 这又是另一个极端.

如果没有这个间接层, 客户端要与服务端通讯, 就要知道服务端对应进程的 ID, 也即是客户端是依赖于服务端的:

显然, 这种模式对于 web 这种一个服务端对应大量客户端访问的情形是极不适应的, 你都不知道有谁可能会来访问你的网站! 你根本无法告诉它们.

而有了端口这一间接层, 对于 web 的情形, 这种依赖被倒置了, 客户端总是把请求发送到 80(或443) 端口, 这些成为标准的一部分, 并要求服务端反过来去适应, 服务端去监听端口的通讯并处理, 变成了一种反向依赖.

深入理解什么是端口(port)

 

如果一个进程想要提供 web 服务, 它启动之后就要去绑定(binding) web 相关的端口,

如果端口已经被其它进程绑定了(即所谓占用了), 就会绑定失败; 又或者被自身前一个未完全退出的进程占据着, 也会绑定失败, 在开发过程中你可能会遇到类似的问题, 一个 web 进程没有关闭, 你又试图启动另一个, 而两者都用了相同的端口, 就会产生冲突.

并在其上持续的监听(listen), 同时在有请求到来的时候去响应(response). 这样一来, 进程 ID 的问题就消解了:

这类似于一个接口回调, 浏览器只需要面向接口索取服务, 而无需知道接口服务的具体提供者, 这些细节被端口层所封装并隐藏起来了.

端口这一间接层的存在解耦(decouple)了客户端与服务端之间的强依赖, 整个体系变得很灵活.

可以把端口视作一般编程概念中的接口(interface), 而想 Nginx, apache, tomcat 等等可以认为是这个接口的不同实现(Implementation).

端口与现实世界的一个类比

为加深理解, 可以举一个现实世界中的例子. 相信大家都有过去市民中心办事的经历, 比如去办理居住证, 护照, 社保等等业务, 你通常会收到一个小纸条让你去某个窗口办理对应业务, 这个窗口其实就类似于端口了:

比如 80 窗口就对应港澳台通行证业务

那么你要办港澳台通行证, 你就奔向 80 号窗口就完了. 你不要去问门口保卫处的王大爷, 到底是哪位同志办理这个业务.

今天可能是小明在办理, 隔了几天, 小明可能受伤了, 流血了, 又轮到小红在那里办理, 又过段时间, 小红也出意外了, 流产了, 又轮到小张在办理, 又过段时间, 小张被发现在办理业务过程中徇私舞弊, 流放了...

等等, 如果此时你的同事问你怎么办港澳台通行证, 你需要知道这些个人事变动的细节吗? 根本不需要呀, 你只需告诉他去 80 号窗口办理就好了...

市民中心的整个体系, 会确保有个会办理这些业务的人员坐在那个窗口下面, 你唯一需要做的, 就是到那个窗口下请求服务即可.

端口与名称服务(naming service)

通过上面现实世界类比的例子, 对于端口的机制, 相信你已经理解得比较深入了. 广义上讲, 端口层也可以视作一个 naming service(名称服务), 这与比如 spring cloud 中的 eureka 里的机制本质上是一样的, 只是这个 name 就是一个抽象的数字, 比如 80. 80 就代表了一个 web 服务, Nginx 之类的 web server 绑定并监听就相当于把自身提供的 web 服务注册于其上.

DNS 域名系统其实也是 naming service, 你通过 xiaogd.net 这个名字(name), 就能获取到我所提供给你的网页服务.

类似的还有 java 里的 JNDI 等, 把一个名字与一个服务关联起来, 比如一个名字就代表一个数据源(数据库连接)之类的.

端口与 IoC(控制反转)

广义上, 端口的上述机制也是控制反转(Ioc: Inversion of Control)思想的一种体现, 如果客户端需要知道服务端的进程 ID, 实际上就被服务端控制了, 毕竟我服务端在哪个 ID 上提供服务, 你就得把你的请求发到相应的 ID 上来;

而有了端口这一中间层呢? 作为客户端, 总是把请求发到对应端口上, 并要求服务端绑定并监听那些端口以及作出响应, 你服务端是反过来被我客户端所控制, 我客户端发到哪个端口, 你服务端就要去相应端口上监听并响应.

大家可以体会一下这种转变. 这种设计或思想在编程领域其实是特别重要的, 在很多其它地方都有体现.

因为浏览器总是把 web 请求发到了 80 或 443 端口, 这就要求一个 web server 进程去监听这些端口. 比如在我的服务器上, web server 是 Nginx, 它启动之后就会去监听 80 和 443 端口, 任何想要访问我的主页的人, 并不需要知道我的 Nginx 进程 ID 是啥, 借助于端口这一间接层, 你就能够与我的 Nginx 进程通讯, 并获取你想要的东西.

事实上你可以这么认为, 浏览器实际上只是在与端口通讯, 端口层再把这些请求委托(delegate)或代理(proxy)给相应的 web server 去处理, 端口的角色就是一个中间人, 一个间接层.

再论缺省端口

现在, 我们应该明白了, 端口是必要的了, 当然, 对最终的用户来说, 则不需要知道这些实现的细节, 对于他们, 应该遵循最小知识原则, 知道得越少越好.

如果你一定要让用户在输入 url 的过程中输入端口, 又或者要输入个 www 等等, 用户就要给你扔过来"十万个为什么"了...

为什么要加个 443?

为什么不是 334, 443是啥意思?

为什么一会儿是 80, 一会儿又是 443?

为什么加个 www, 啥意思?

为什么末尾还加个斜杠, 不加会死吗?

...

惹不起, 惹不起...

还记得前面说的, 用户是笨蛋, 用户是懒汉吗?

这里又要引用一句计算机世界的名言了: 程序员和上帝打赌要开发出更大更好连傻瓜都会用的软件, 而上帝却总能创造出更大更傻的傻瓜。目前为止,上帝赢了。

Programmers are in a race with the Universe to create bigger and better idiot-proof programs. The Universe is trying to create bigger and better idiots. So far the Universe is winning.

说句心里话, 很多时候, 用户能记住你的域名就阿弥陀佛了, 你就该烧高香了, 你还想用户记住你的端口, 真的想多了...

另一方面, 说到这里我们应该也能明白了, 那就是理论上, web 服务实际上可以构建在任何端口之上. 比如在本地开发的时候, 用户只有你自己, 那当然你可以随便挑一个端口, 比如 8080, 只要自己知道就好了或顶多告诉另一个与你配合的前端同事.

同理, 其它非 web 的服务, 比如 ftp 服务, 也不一定说非得在 21 端口上等等; mysql 服务的端口同样可以调整为 3306 之外的端口.

又或者说, 你想提供一个服务, 但只想小范围内的人知道, 你可以挑一个很偏门的端口, 这样一般人只输一个域名就没法访问到你的服务了.

比如有人想偷偷提供一些服务, 放一些广淫民群众喜闻乐见的小视频啥的...刑法警告, 后果自负!! 别说我没有提醒你.

端口与 TCP/UDP 协议

前面一直在说, 什么 3306 端口, 80 端口, 443 端口, 其实严格来说, 端口是分 TCP 端口和 UDP 端口的, 不过多数时候遇到的都是 TCP 端口, 但 TCP 80 端口和 UDP 80 端口是不同的端口.

UDP 的 80 端口, 包括 443 端口其实被保留了, 目前的 http 协议只构建在 TCP 协议之上.

当然, 理论上讲, 在 UDP 上构建 http 也不能说就完全不行, 毕竟, 无论 UDP 还是 TCP 都是构建在 IP 协议之上, 总之呢, 计算机的世界没什么是不可能的, 而且似乎真有人在做这些尝试, 不过这就属于两小母牛对屁股--比较牛逼的范畴了, 深水区了, 咱也不懂, 不多说了.

还有一点, 对于进程间的端口通讯, 实际上是对称的, 也即是说, 服务器的响应也是先回到一个客户端的端口上.

如果你用 Windows 10 系统, 可以在 任务管理器 > 性能 > 打开资源监视器 > 网络 > TCP 连接, 点击下远程端口可以按照从小到大排列, 通常就可以看到 443 的相关连接了, 可以看到左边有一栏本地端口, 一个 TCP 连接总是有一个远程端口, 一个本地端口:

当发起一个 TCP 连接时, 客户端首先自己先随机挑选一个没有被使用的端口作为服务器响应的接收端口, 比如 38672. 在一个 TCP 的包里, 无论是握手包还是后续的数据包, 包头部分最重要的两个字段, 一个就是源端口(source port), 比如 38672; 另一个就是目标端口(destination port), 比如 80, 或者 443.

可以这样看, 服务器的响应也是先回到源端口, 比如 38672 上, 源端口再转给最终的进程, 比如浏览器.

而对于一个 IP 包, 同样的, 包头部分最重要的两个字段, 一个就是源IP(source IP); 另一个就是目标 IP(destination IP).

而 TCP 包会作为 IP 包的数据包被打包到 IP 包里面, 也一个 IP 包里其实包含了 IP + 端口.

IP 加端口再加上端口与进程间的关联, 分属两个不同主机间的进程就能通过 TCP(UDP)/IP 协议愉快地进行进程间的通讯(IPC)了.

当然了, 同一个主机间的进程也同样可以利用这套机制. 但同一个主机间还可以有其它选择, 这个具体看各个操作系统是否提供相关机制及支持. 而 TCP/IP 属于广泛应用的标准协议, 从而得到了广泛支持.

因为篇幅关系, 关于这样 TCP 协议等的细节, 以及包括 Socket, 连接等概念, 以及虚拟主机, 反向代理等等就不再展开去说, 如果你感兴趣, 欢迎留言, 后续会考虑再写一些文章去介绍.

同样因为篇幅的原因以及同时我也不是计算机网络及协议方面的专家, 关于端口方面的, 如果有什么说得不到位, 或不正确的地方, 欢迎留言指正, 关于端口方面的介绍就到这里.

架构大数据双料架构师
关注 关注
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
port 端口查看工具
06-04
port 端口查看工具,通过命令方式输入 port就可以查看到端口占用情况
完成端口深入理解及一种变态用法
大宝(sodme)的专栏
05-26 6248
本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可不经作者同意,任意被转载、引用、复制,但任何对本文的引用都必须注明本文作者,出处以及本行声明信息。谢谢。  作为WIN平台下同时管理数千个连接的最为高效的网络模型,完成端口已经被越来越多的人认识和熟悉。通常情况下,一种经典的完成端口使用模式是:  (1)创建完成端口,并在指定端口开始监听;  (2)创建接
这39个端口黑客最常攻击,看看有哪些?
最新发布
Python_0011的博客
08-30 1661
在计算机网络中,端口是指网络通信的端点,用于标识网络中不同的服务或应用程序。每个端口都对应一个特定的网络协议,并且在一个主机的IP地址上可以有多个端口同时开放。端口的编号范围从0到65535,其中较低编号的端口通常用于众所周知的服务(称为“知名端口”),例如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。这些端口由IANA(Internet Assigned Numbers Authority)分配给特定的服务和协议。常见的服务如HTTP、FTP、SMTP等都在此范围内。
深入理解网络端口
linux_tcpdump的博客
09-19 150
In networking, a port is a virtual place on a machine that is open to connections from other machines. Every networked computer has a standard number of ports, and each port is reserved for certain types of communication. Think of ports for ships in a harb
端口的理解
回忆的往昔
04-15 652
在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。 本地操作系统会给那些有需求的进程
IO_Port.rar_IO port_IOCP_io完成端口_port io_完成端口
09-20
为了解决这个问题,Microsoft引入了一种高效的I/O模型——I/O完成端口(IOCP,Input/Output Completion Port),它允许多个线程并发处理I/O请求,从而显著提升系统性能。本文将深入探讨IOCP的概念、工作原理以及如何...
ScanPort端口扫描工具_01229712.rar
06-03
《ScanPort端口扫描工具:深入理解与应用》 端口扫描是网络安全领域中的一个基础且重要的技术,它主要用于探测目标主机上开放的网络服务,从而揭示潜在的安全风险。ScanPort端口扫描工具,正如其名,是一款专门用于...
scan_port.tar.gz_Port Scan_TCP端口扫描
09-23
通过编写和运行这些Python脚本,你可以深入理解端口扫描的工作机制,并能够创建自定义的扫描工具,以适应特定的网络环境和安全需求。同时,学习和使用Nmap这样的专业工具也是提升扫描效率和准确性的有效途径。
ScanPort端口扫描工具
10-06
**端口扫描技术详解** 端口扫描是网络安全领域中一种常用的技术,主要用于探测目标主机上开放的服务和...理解端口扫描的基本原理和应用场景,以及如何正确使用这样的工具,对于网络管理员和安全专业人员来说至关重要。
例4-4 连线端口的使用.rar_connection port_labview_labview接线端口_连线端口使用
09-24
首先,让我们深入了解LabVIEW的连线端口端口分为输入端口和输出端口,它们是VI前面板上的小方块或圆圈,显示为实心或空心。实心端口表示输入,空心端口表示输出。数据从输入端口进入,通过程序流程处理,然后从...
Port端口
z972065491的博客
11-16 2658
端口表示当前计算机上的一个进程。例如:手机开着 微信 王者 QQ 这时候我们使用QQ给对方发送一条消息,这时我们要知道对方的ip地址,这样才能到达指定的位置,但是消息到了指定位置,又怎么知道这个消息就是发送给QQ,而不是微信或者给其他应用的呢,这就需要端口号来指定具体的进程,ip地址相当于寄快递时候你要寄到哪一家,而端口号就相当于你寄到这个家里具体给谁,端口号可以唯一的标识一台主机上的应用程序,从而实现消息的精准送达,
javaPort端口是怎么回事?有什么用?
mark_to_win的专栏
05-01 2940
马克-to-win:Port端口是个伟大的发明。否则当我又想访问www.baidu.com获得他的网页,又想同时访问这台机器的sqlserver数据库获取数据库时怎么办呢?这时就用端口来区分。一个在80口,一个在1433端口。一个端口相对于一个程序(先不谈一个程序用多个端口的情况)。一台机器共有65536个端口Port must be between 0 and 65535 inclusive....
浅谈TCP协议的端口port
热门推荐
ShuaiWangCSDN的博客
03-09 1万+
一:如何查看端口 1.查看所有的端口占用情况:    在windows命令行窗口下执行: C:\>netstat -ano 2.查看指定端口的占用情况  C:\>netstat -aon|findstr "9050" 3.也可以使用其他第三方工具,例如:   TcpView,下载地址:http://pan.baidu.com/s/1bnGfIwv   Fport” (可到http://
服务器端口是什么?在网络技术中,端口Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是
yuzhonglaomeng的博客
07-27 5145
在网络技术中,端口Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。这里将要介绍的就是逻辑意义上的端口。 查看端口 在Windows 2000...
网络编程之端口 port
05-17 957
端口 port 端口端口表示计算机上的一个程序的进程 不同的进程有不同的端口号,用来区分软件。 被规定:0~65535 TCP/UDP:65535 * 2 tcp:占80端口,udp:也占80端口,并不冲突,因为这两种协议不同。 注:单个协议下,端口号不能冲突。 端口分类 共有端口:0~1023 1、HTTP协议:默认端口 80 2、HTTPS协议:默认端口 443 3、FTP:默认端口 21 4、Telent:默认端口 23 程序注册端口:1024~49151,分配给用户或者程序
端口port)详解
qq_38791687的博客
06-21 1万+
 计算机 “端口”可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如: USB 端口,串行端口等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和 I / O (基本输入输出)缓冲区。按端口号可分为 3 大类:( 1 )公认端口(Well Known Ports ):从0 到1023 ,它们紧密绑定(binding )于一...
深入解析IO Completion Port(完成端口
"理解IO Completion Port(完成端口),一种用于高效处理大量并发I/O操作的Windows系统机制。本文档将介绍完成端口的基本概念、实现方式,并通过一个Echo程序的示例进行深入解析,涉及同步/异步、堵塞/非堵塞、多线程...
写文章

热门文章

  • List.of() 与 Arrays.asList()总结 8616
  • 毕业5年,腾讯65万,拿到美团、滴滴、快手、阿里offer多少钱 7103
  • Spring 中 @Qualifier 注解还能这么用? 6282
  • Java类与类之间的继承关系 3568
  • 2020阿里巴巴技术面试题集锦!(附答案) 3305

最新评论

  • Java实现图片转文字!(OCR实现)

    一个bug玩一天: Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. 保证错误怎么修改环境变量

  • 最全JAVA学习路线(值得收藏)

    飞羽疾驰: 可以的,我看的另一个Java路线,自学6个月拿了5个offer:https://knife.blog.csdn.net/article/details/132629361

  • SpringCloud+Nacos集成Seata-1.7.0分布式事务

    不喝奶茶的Programmer: 服务跑在本机,但seata、nacos跑在docker,所以seata启动的时候要带上宿主机的ip,不然注册到nacos上是容器ip,会导致应用服务连不上seata

  • SpringCloud+Nacos集成Seata-1.7.0分布式事务

    BA201: 部署到docker上和本机上不都一样吗

  • 再见了SpringCloud!这个架构挺猛,居然干掉了Dubbo

    Jensen-lyz: 资料非常好,求资料一份,谢谢大佬表情包

最新文章

  • 都用HTTPS了,还能被查出浏览记录?
  • Spring 中 @Qualifier 注解还能这么用?
  • 一道经典面试题:@Configuration 和 @Component 有何区别?
2023年58篇
2021年12篇
2020年156篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢卡通雕塑工厂宝山区玻璃钢雕塑哪家专业江门玻璃钢造型雕塑玻璃钢雕塑如何固定大象玻璃钢雕塑怎么制作福州玻璃钢雕塑制品商洛玻璃钢浮雕雕塑玻璃钢造型雕塑工艺品玻璃钢花盆制作黑龙江创意玻璃钢雕塑图片盐城玻璃钢雕塑多少钱洛阳玻璃钢雕塑厂家直销阳泉玻璃钢玻璃钢雕塑公司石景山玻璃钢海洋雕塑深圳城市道路玻璃钢花盆营口市玻璃钢雕塑镂空不锈钢校园玻璃钢雕塑价格上海节庆商场美陈怎么样商场美陈效果图怎么做深圳欧式玻璃钢雕塑报价多少上海玻璃钢造型雕塑批发厦门玻璃钢卡通雕塑工厂鹰潭抽象玻璃钢雕塑多少钱玻璃钢剪影雕塑广场玻璃钢雕塑报价爆销罗马柱玻璃钢雕塑浙江玻璃钢雕塑绵羊图片成都玻璃钢雕塑定做公司常用玻璃钢雕塑摆件设计企业衡水园林玻璃钢雕塑价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化