当前位置: 首页 > news >正文

电子类网站建设工业和信息化部工业文化发展中心

电子类网站建设,工业和信息化部工业文化发展中心,腾讯云做网站选哪个,为什么做图书管理网站软件工程是一个庞大且不断演化的领域#xff0c;涉及许多创新。虽然如此#xff0c;大多数技术 —— 如果不是全部 —— 在软件工程中往往最终汇聚为几个基本原则。工程师更好地掌握软件工程的方法是熟悉软件工程的基础知识#xff0c;而不是那些不断变化的框架、语言或平台… 软件工程是一个庞大且不断演化的领域涉及许多创新。虽然如此大多数技术 —— 如果不是全部 —— 在软件工程中往往最终汇聚为几个基本原则。工程师更好地掌握软件工程的方法是熟悉软件工程的基础知识而不是那些不断变化的框架、语言或平台。 即使熟悉基础知识也需要时间和努力。人们经常问我如何掌握软件工程起初我无法客观地回答这个问题。但最近我开始观察自己的熟悉过程我对这个过程有了更清晰的理解。 事实上我从不强迫自己掌握任何东西。如果你一直关注我的工作你会注意到我很少谈论新的潮流技术相反我经常谈论那些已经过时、没有人再讨论的软件工程主题。这不是因为新的东西不好而是因为我觉得还有更多我不了解的东西我宁愿追求那些东西。 在这篇文章中我将带你走过我最近的开发经历因为这些经历还新鲜在我的脑海中。 QQ — 问题和问题 对我来说熟悉始于问题。我提出真正的问题让自己进入探索的道路在这个过程中我会遇到一个又一个的障碍逐个克服。每个问题都会引发另一个问题直到我达到一个能够统一一切的基础知识。就像一个递归函数达到了其基本条件。 引发问题的原因各不相同可能是一个学生或者是工作中的一个随机 bug。不想陷入哲学讨论但我发现承认自己不知道某个东西对我在熟悉过程中帮助很大。当一个学生问一个老师不知道的问题时往往会让老师感到不安。我一直在努力克服这一点真诚地探索问题而不是向学生展示我有多么了解。 我还有很多不知道的东西。 接下来的文章将涉及一些技术细节。让我们深入了解。 我所不了解的内容 当后端应用程序监听一个地址和端口时它可以开始接收来自客户端的请求。请求无论是 HTTP 还是其他协议以数据包的形式传输。这就是应用程序如何接收网络数据包的方式。 为简单起见我在这里省略了用于连接创建 / 接受的其他队列。这假设连接已经创建好。 以下是流程 内核在内核内存中为应用程序创建接收缓冲区。内核将传入的网络数据包放入接收队列。应用程序从接收缓冲区读取数据包并将其复制到自己的进程内存中。应用程序处理数据解密、解析协议、触发事件。 然而我发现自己对以下两个问题还不太了解 网络接口控制器NIC是如何将数据传输到内核内存的为什么数据必须先经过内核而不是直接进入进程内存 接下来的段落中我将尝试回答这两个问题。 Q1 — NIC 如何将数据包传输到内核 为了回答第一个问题我必须了解 CPU 的工作原理在这个过程中我发现了很多东西这里与我们相关的是中断interrupt的概念。为了从任何外部设备鼠标、键盘、硬盘或 NIC读取数据CPU 必须被中断并告知在哪里读取或写入数据。 因此我将这个知识应用到我的问题上得出了以下结论 当 NIC 接收到电信号、光信号或无线电信号无论是以太网、光纤还是 WIFI/5G并将其转换为二进制数据存储在其本地缓冲区中时它会向 CPU 发送中断请求要求 CPU 停止当前工作并将数据传输到主存中。 CPU 从 NIC 中读取数据并将其放入缓存行中然后将缓存行刷新到内存中。但是数据确切地放在内存的哪个位置呢这就是 NIC 驱动程序在内核空间运行的软件告诉 CPU 地址位置的地方。CPU 最终将数据刷新到提供的内存地址中。这个循环一直重复直到 NIC 中没有数据。然后内核接管处理。 这里花费了很多时间来试图回答更具体的问题比如 CPU 如何将缓存行刷新到内存如果其他核心也在读取相同的内存位置会发生什么但是我暂时跳过这些问题。 这一切对我来说都是有道理的只有一件事让我感到困惑这听起来非常冗长。如果我在软件工程中了解了什么那就是我们尽量避免过度冗长。 虽然中断在小型 I/O如鼠标移动或键盘按键中有效但对于大数据传输如网络传输、磁盘读取或写入对 CPU 来说非常耗时。因此我认为不能仅仅这样处理肯定还有其他方式。将大量数据放入微小的 CPU 寄存器和缓存中并进行刷新将需要很长时间。于是我进行了更多的搜索发现了 DMA。 原来这正是为什么发明了 DMA直接内存访问的原因。DMA 允许 NIC 直接访问主内存以便设备可以自行读取和写入数据从而使 CPU 解放出来。CPU 通过在 DMA 上设置目标内存地址以及应从哪个设备即 NIC读取数据来启动传输所有这些都是根据设备驱动程序的指令。 在 NIC 开始将数据直接传输到内存之后内核 / 驱动程序就可以在内存中正常处理一次数据。 问题 2 — 为什么数据首先进入内核 但实际上为什么不直接将数据从 NIC 移动到进程内存呢从 NIC 直接复制数据到内核然后再从内核复制到应用程序这样做的成本肯定是累积的。我发现设备驱动程序在内核中运行而内核是与 NIC 进行通信的实体所以数据包的存在于内核中。此外内核目前还不知道将数据放在进程内存的哪个位置而且它也不知道进程是否准备好读取数据。老实说我不明白为什么不能通过重新设计 API 来实现这一点。我认为使用nbsp;io_uring 可能可以做到这一点但我还没有探索过。 即使使用 DMA每个数据包的传输对 DMA 控制器来说也是一种负担。因此我发现 Intel 提出了一种称为 DMA 合并的想法其中 NIC 在本地缓冲数据包然后延迟接收数据包的 DMA 传输。这样可以最小化传输次数以节省能源但代价是增加延迟。 在这个探索过程中我还学到了虚拟内存、转换后备缓冲区、NUMA 架构、上下文切换等等知识。 总结 我刚才所做的被称为 “附带知识”。在精通的过程中除了目标知识还发现了其他事物。 也许你会说真的吗你不知道中断是什么甚至不知道 DMA 是什么吗事实上我确实听说过这些概念但从来没有在能够真正理解或引起我的兴趣的上下文中接触过它们。 我不知道该如何形容但是自己发现事物与别人把事物放在盘子里递给你是不同的感觉。 如果你喜欢我的文章点赞关注转发
http://www.sczhlp.com/news/194930/

相关文章:

  • 阜阳网站是订货网站开发价格
  • UML复习
  • 2025 值得关注的除锈剂厂家企业推荐榜单,覆盖多场景需求
  • Day3整形输入
  • 2025优质电缆/防火/模压/瓦楞/大跨距/热镀锌/热浸锌/不锈钢/光伏/铝合金/锌铝镁桥架厂家推荐:五家实力企业的技术与服务特色解析
  • 2025 领域优质石油/电厂/钢铁厂/化工/消防/船舶/住宅/管道/隧道/地铁电伴热带厂家推荐榜单,工业与民用场景全覆盖
  • 在哪个网站做淘宝水印网站空间每年继费到哪交
  • 网页设计自学视频网站网站上的导航栏怎么做
  • 自己做的网站打不开怎么搞重庆市建设工程信息官方网站
  • 做测评的网站wordpress汉字
  • 百度站长之家西安网页制作培训
  • 汽车网站建设的目的视频网站如何做营销
  • 专业APP客户端做网站游戏网页制作模板
  • 东莞网站建设培训学校wordpress 3.6升级4.7
  • 西域数码网站建设商业网站建设的意义
  • 淮安网站制作多少钱wordpress 安卓主题下载失败
  • 湖南郴州市苏州优化网站
  • 模板建站难吗网站注册网站违法吗
  • 图片叠加网站建立主题网站的顺序
  • 旅游公网站如何做wordpress视频无法播放视频播放
  • 网站 维护 协议海阳seo排名
  • 网站后缀有哪些湖北专业网站建设市面价
  • wordpress网站首页wordpress 值班系统
  • 二级建造师证件查询闽侯seo
  • 温州教育网站建设wordpress英文版
  • 长春建站方案wordpress 与 微信怎么配合
  • 学做美食视频网站有哪些网站做微信链接怎么做
  • 网站二级菜单是什么原因wordpress编辑器软件
  • 女生做网站运营累不累慈溪网站建设公司
  • 10080 端口打不开页面