当前位置:首页 > 科技  > 软件

五分钟帮您理解Linux网络核心知识点——Socket和Epoll

来源: 责编: 时间:2023-08-09 23:03:23 407观看
导读关于linux网络相关的基础知识点,最热的两个就是socket和epoll,接下来我就用最简单的方式把他俩说清楚便于大家理解!SocketSocket 是一种进程间通信的方法,它允许位于同一主机(计算机)或使用网络连接起来的不同主机上的应用

关于linux网络相关的基础知识点,最热的两个就是socket和epoll,接下来我就用最简单的方式把他俩说清楚便于大家理解!FCG28资讯网——每日最新资讯28at.com

Socket

Socket 是一种进程间通信的方法,它允许位于同一主机(计算机)或使用网络连接起来的不同主机上的应用程序之间交换数据。FCG28资讯网——每日最新资讯28at.com

Socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open> 读写write/read > 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)FCG28资讯网——每日最新资讯28at.com

Socket实现细节

当有客户端连接服务端时,服务端 Socket 文件中会写入这个客户端 Socket 的文件描述符。进程可以通过 accept() 方法,从服务端 Socket 文件中读出客户端的 Socket 文件描述符,从而拿到客户端的 Socket 文件。FCG28资讯网——每日最新资讯28at.com

程序猿实现一个网络服务器的时候,会先手动去创建一个服务端 Socket 文件。服务端的 Socket 文件依然会存在操作系统内核之中,并且会绑定到某个 IP 地址和端口上。以后凡是发送到这台机器、目标 IP 地址和端口号的连接请求,在形成了客户端 Socket 文件之后,文件的文件描述符都会被写入到服务端的 Socket 文件中。FCG28资讯网——每日最新资讯28at.com

应用只要调用 accept 方法,就可以拿到这些客户端的 Socket 文件描述符,这样服务端的应用就可以方便地知道有哪些客户端连接了进来。而每个客户端对这个应用而言,都是一个文件描述符。如果需要读取某个客户端的数据,就读取这个客户端对应的 Socket 文件。如果要向某个特定的客户端发送数据,就写入这个客户端的 Socket 文件。FCG28资讯网——每日最新资讯28at.com


FCG28资讯网——每日最新资讯28at.com

FCG28资讯网——每日最新资讯28at.com


FCG28资讯网——每日最新资讯28at.com

epoll

与 socket 的交互,最核心的场景就是网络 IO 的处理, epoll 会协助我们高效完成。我们新建立一个网络 socket 的时候,交给 epoll 就可以了,当网络 IO 有数据到来时它会通知我们,当我们要往网络 IO 写数据时,epoll 也会自动帮我们发送,本质上epoll实现了IO 多路复用FCG28资讯网——每日最新资讯28at.com

FCG28资讯网——每日最新资讯28at.com

Epoll数据结构如下:FCG28资讯网——每日最新资讯28at.com

· rbr:被 epoll 所管理的所有 socket 都存储在红黑树中。FCG28资讯网——每日最新资讯28at.com

· rdllist:存储着所有就绪的 socket(所谓"就绪",意思指有网络数据到来,或者有数据要发送出去。)FCG28资讯网——每日最新资讯28at.com

FCG28资讯网——每日最新资讯28at.com

就绪列表是 epoll 能够高效的核心,对于每一个就绪的 socket,会直接放入 rdllist 中,epoll_wait 获取到就绪的 socket 时,直接从 rdllist 中进行获取就可以了,无需再进行查找。epoll 是基于事件回调机制地,当 epoll 所管理地 socket 有数据到来时,会触发事件回调函数,将就绪的 socket 放置在 rdllist 中,并且通知 epoll_wait 所在的进程来处理数据。epoll的优点如下:FCG28资讯网——每日最新资讯28at.com

  • 支持海量并发连接。
  • 使用时间复杂度为 O(logn)的红黑树管理所有的 socket。
  • 提高 CPU 的使用率,高效地使用 CPU 时间片处理所管理的 socket 连接。
  • 基于事件回调机制处理消息,而不是主动轮询机制。

除了epoll,内核还提供了select和poll,但是二者效率较差,这里就不再进行介绍了。FCG28资讯网——每日最新资讯28at.com

最后的总结

不同的客户端与服务端通信通过Socket实现,而epoll使得通信变更加高效!FCG28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5179-0.html五分钟帮您理解Linux网络核心知识点——Socket和Epoll

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: CSS 渐变中的颜色空间和色相插值

下一篇: SpringBoot3基础用法

标签:
  • 热门焦点
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
Top