响应式网站如何设计h5响应式 wordpress

pingmian/2026/1/27 7:03:03/文章来源:
响应式网站如何设计,h5响应式 wordpress,wordpress 上传文章,国外网站设计网站目录 1. 什么是零拷贝2. 传统的IO执行流程3. 零拷贝相关知识3-1. 内核空间和用户空间3-2. 什么是用户态、内核态3-3. 什么是上下文切换3-4. 虚拟内存3-5. DMA技术 4. 零拷贝实现的几种方式4-1. mmapwrite实现的零拷贝4-2. sendfile实现的零拷贝4-3. sendfileDMA scatter/gather… 目录 1. 什么是零拷贝2. 传统的IO执行流程3. 零拷贝相关知识3-1. 内核空间和用户空间3-2. 什么是用户态、内核态3-3. 什么是上下文切换3-4. 虚拟内存3-5. DMA技术 4. 零拷贝实现的几种方式4-1. mmapwrite实现的零拷贝4-2. sendfile实现的零拷贝4-3. sendfileDMA scatter/gather实现的零拷贝 5. java提供的零拷贝方式5-1. Java NIO对mmap的支持5-2. Java NIO对sendfile的支持 1. 什么是零拷贝 零拷贝 是指计算机执行IO操作时CPU不需要将数据从一个存储区域复制到另一个存储区域从而可以减少上下文切换以及CPU的拷贝时间。它是一种 I/O 操作优化技术 2. 传统的IO执行流程 以 WEB 程序为例传统的IO流程是将服务端主机磁盘中的文件从已连接的socket发出去关键实现代码如下 while((n read(diskfd, buf, BUF_SIZE)) 0)write(sockfd, buf , n);传统的IO流程包括read和write的过程。 read把数据从磁盘读取到内核缓冲区再拷贝到用户缓冲区。write先把数据写入到socket缓冲区最后写入网卡设备。 流程图如下 用户应用进程调用read函数向操作系统发起IO调用上下文从用户态转为内核态切换1DMA控制器把数据从磁盘中读取到内核缓冲区。CPU把内核缓冲区数据拷贝到用户应用缓冲区上下文从内核态转为用户态切换2read函数返回用户应用进程通过write函数发起IO调用上下文从用户态转为内核态切换3CPU将用户缓冲区中的数据拷贝到socket缓冲区DMA控制器把数据从socket缓冲区拷贝到网卡设备上下文从内核态切换回用户态切换4write函数返回 从流程图可以看出传统IO的读写流程包括了4次上下文切换4次用户态和内核态的切换4次数据拷贝两次CPU拷贝以及两次的DMA拷贝)什么是DMA拷贝呢我们一起来回顾下零拷贝涉及的操作系统知识点。 3. 零拷贝相关知识 3-1. 内核空间和用户空间 我们电脑上跑着的应用程序其实是需要经过操作系统才能做一些特殊操作如磁盘文件读写、内存的读写等等。因为这些都是比较危险的操作不可以由应用程序乱来只能交给底层操作系统来。 因此操作系统为每个进程都分配了内存空间一部分是用户空间一部分是内核空间。内核空间是操作系统内核访问的区域是受保护的内存空间而用户空间是用户应用程序访问的内存区域。 以32位操作系统为例它会为每一个进程都分配了4G(2的32次方)的内存空间。 内核空间主要提供进程调度、内存分配、连接硬件资源等功能用户空间提供给各个程序进程的空间它不具有访问内核空间资源的权限如果应用程序需要使用到内核空间的资源则需要通过系统调用来完成。进程从用户空间切换到内核空间完成相关操作后再从内核空间切换回用户空间。 3-2. 什么是用户态、内核态 如果进程运行于内核空间被称为进程的内核态如果进程运行于用户空间被称为进程的用户态。 3-3. 什么是上下文切换 什么是CPU上下文 CPU 寄存器是CPU内置的容量小、但速度极快的内存。而程序计数器则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前必须的依赖环境因此叫做CPU上下文。 什么是CPU上下文切换 它是指先把前一个任务的CPU上下文也就是CPU寄存器和程序计数器保存起来然后加载新任务的上下文到这些寄存器和程序计数器最后再跳转到程序计数器所指的新位置运行新任务。 一般我们说的上下文切换就是指内核操作系统的核心在CPU上对进程或者线程进行切换。进程从用户态到内核态的转变需要通过系统调用来完成。系统调用的过程会发生CPU上下文的切换。 CPU 寄存器里原来用户态的指令位置需要先保存起来。接着为了执行内核态代码CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。 3-4. 虚拟内存 现代操作系统使用虚拟内存即虚拟地址取代物理地址使用虚拟内存可以有2个好处 虚拟内存空间可以远远大于物理内存空间多个虚拟内存可以指向同一个物理地址 正是多个虚拟内存可以指向同一个物理地址可以把内核空间和用户空间的虚拟地址映射到同一个物理地址这样的话就可以减少IO的数据拷贝次数啦示意图如下 3-5. DMA技术 DMA英文全称是Direct Memory Access即直接内存访问。DMA本质上是一块主板上独立的芯片允许外设设备和内存存储器之间直接进行IO数据传输其过程不需要CPU的参与。 我们一起来看下IO流程DMA帮忙做了什么事情 用户应用进程调用read函数向操作系统发起IO调用进入阻塞状态等待数据返回。CPU收到指令后对DMA控制器发起指令调度。DMA收到IO请求后将请求发送给磁盘磁盘将数据放入磁盘控制缓冲区并通知DMADMA将数据从磁盘控制器缓冲区拷贝到内核缓冲区。DMA向CPU发出数据读完的信号中断把工作交换给CPU由CPU负责将数据从内核缓冲区拷贝到用户缓冲区。用户应用进程由内核态切换回用户态解除阻塞状态 可以发现DMA做的事情很清晰啦它主要就是帮忙CPU转发一下IO请求以及拷贝数据。为什么需要它的 主要就是效率它帮忙CPU做事情这时候CPU就可以闲下来去做别的事情提高了CPU的利用效率。大白话解释就是CPU老哥太忙太累啦所以他找了个小弟名叫DMA 替他完成一部分的拷贝工作这样CPU老哥就能着手去做其他事情。并且 CPU 和磁盘之间速度差异过大如果让 CPU 直接读取硬件会影响效率。 4. 零拷贝实现的几种方式 零拷贝并不是没有拷贝数据而是减少用户态/内核态的切换次数以及CPU拷贝的次数。零拷贝实现有多种方式分别是 mmapwritesendfile带有DMA收集拷贝功能的sendfile 4-1. mmapwrite实现的零拷贝 mmap 的函数原型如下 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);addr指定映射的虚拟内存地址length映射的长度prot映射内存的保护模式flags指定映射的类型fd进行映射的文件句柄offset文件偏移量 前面一小节零拷贝相关的知识点回顾我们介绍了虚拟内存可以把内核空间和用户空间的虚拟地址映射到同一个物理地址从而减少数据拷贝次数mmap就是用了虚拟内存这个特点它将内核中的读缓冲区与用户空间的缓冲区进行映射所有的IO都在内核中完成。 mmapwrite 实现的零拷贝流程如下 用户进程通过mmap方法向操作系统内核发起IO调用上下文从用户态切换为内核态。CPU利用DMA控制器把数据从硬盘中拷贝到内核缓冲区。上下文从内核态切换回用户态mmap方法返回。用户进程通过write方法向操作系统内核发起IO调用上下文从用户态切换为内核态。CPU将内核缓冲区的数据拷贝到的socket缓冲区。CPU利用DMA控制器把数据从socket缓冲区拷贝到网卡上下文从内核态切换回用户态write调用返回。 可以发现mmapwrite 实现的零拷贝I/O发生了4次用户空间与内核空间的上下文切换以及3次数据拷贝。其中3次数据拷贝中包括了2次DMA拷贝和1次CPU拷贝。 mmap 是将内核缓冲区的地址和用户缓冲区的地址进行映射内核缓冲区和应用缓冲区指向同一块内存区域所以节省了一次CPU拷贝并且用户进程内存是虚拟的只是映射到内核的缓冲区可以节省一半的内存空间。 4-2. sendfile实现的零拷贝 sendfile 是Linux2.1内核版本后引入的一个系统调用函数API如下 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);out_fd:为待写入内容的文件描述符一个socket描述符。in_fd:为待读出内容的文件描述符必须是真实的文件不能是socket和管道。offset指定从读入文件的哪个位置开始读如果为NULL表示文件的默认起始位置。count指定在fdout和fdin之间传输的字节数。 sendfile表示在两个文件描述符之间传输数据它是在操作系统内核中操作的避免了数据从内核缓冲区和用户缓冲区之间的拷贝操作因此可以使用它来实现零拷贝。 sendfile实现的零拷贝流程如下 用户进程发起 sendfile 系统调用上下文从用户态转向内核态切换1DMA控制器把数据从硬盘中拷贝到内核缓冲区。CPU将内核缓冲区中数据拷贝到socket缓冲区DMA控制器把数据从socket缓冲区拷贝到网卡上下文从内核态切换回用户态切换2sendfile调用返回。 可以发现sendfile 实现的零拷贝I/O发生了2次用户空间与内核空间的上下文切换以及3次数据拷贝。 其中3次数据拷贝中包括了2次DMA拷贝和1次CPU拷贝。 那能不能把CPU拷贝的次数减少到0次呢有的即带有DMA收集拷贝功能的 sendfile 4-3. sendfileDMA scatter/gather实现的零拷贝 linux 2.4版本之后对 sendfile 做了优化升级引入SG-DMA技术其实就是对DMA拷贝加入了scatter/gather操作它可以直接从内核空间缓冲区中将数据读取到网卡。使用这个特点搞零拷贝即还可以多省去一次CPU拷贝。 sendfileDMA scatter/gather实现的零拷贝流程如下 用户进程发起 sendfile 系统调用上下文从用户态转向内核态切换1DMA控制器把数据从硬盘中拷贝到内核缓冲区。CPU把内核缓冲区中的文件描述符信息包括内核缓冲区的内存地址和偏移量发送到 socket 缓冲区DMA控制器根据文件描述符信息直接把数据从内核缓冲区拷贝到网卡上下文从内核态切换回用户态切换2sendfile调用返回。 可以发现sendfileDMA scatter/gather 实现的零拷贝I/O发生了2次用户空间与内核空间的上下文切换以及2次数据拷贝。 其中2次数据拷贝都是DMA拷贝。这就是真正的 零拷贝Zero-copy) 技术全程都没有通过CPU来搬运数据所有的数据都是通过DMA来进行传输的。 5. java提供的零拷贝方式 Java NIO对mmap的支持Java NIO对sendfile的支持 5-1. Java NIO对mmap的支持 Java NIO有一个 MappedByteBuffer 的类可以用来实现内存映射。它的底层是调用了Linux内核的mmap的API。 mmap的小demo如下 public class MmapTest {public static void main(String[] args) {try {FileChannel readChannel FileChannel.open(Paths.get(./jay.txt), StandardOpenOption.READ);MappedByteBuffer data readChannel.map(FileChannel.MapMode.READ_ONLY, 0, 1024 * 1024 * 40);FileChannel writeChannel FileChannel.open(Paths.get(./siting.txt), StandardOpenOption.WRITE, StandardOpenOption.CREATE);//数据传输writeChannel.write(data);readChannel.close();writeChannel.close();}catch (Exception e){System.out.println(e.getMessage());}} }5-2. Java NIO对sendfile的支持 FileChannel 的transferTo() / transferFrom()底层就是sendfile() 系统调用函数。Kafka 这个开源项目就用到它平时面试的时候回答面试官为什么这么快就可以提到零拷贝sendfile这个点。 Override public long transferFrom(FileChannel fileChannel, long position, long count) throws IOException {return fileChannel.transferTo(position, count, socketChannel); }sendfile的小demo如下 public class SendFileTest {public static void main(String[] args) {try {FileChannel readChannel FileChannel.open(Paths.get(./jay.txt), StandardOpenOption.READ);long len readChannel.size();long position readChannel.position();FileChannel writeChannel FileChannel.open(Paths.get(./siting.txt), StandardOpenOption.WRITE, StandardOpenOption.CREATE);//数据传输readChannel.transferTo(position, len, writeChannel);readChannel.close();writeChannel.close();} catch (Exception e) {System.out.println(e.getMessage());}} }参考https://www.modb.pro/db/218517

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江津做电子商务网站织梦移动网站模板

起因是公司的crm录入不规范,有重复数据。 之后考虑到需要手动处理,首先需要自动找出重复的数据 查重要求: 存在多个不允许重复的字段,任一字段重复,则判断为同一个客户。划分到同一重复组中。 查重sql如下 SELECT CONCAT(组, dense_rank() OVER (ORDER BY group_key)) …

wordpress二次开发seo推广网站

[申明]转载请保留原作网站:[url]http://www.sjhf.net[/url] 关键字[LINUX误删除数据恢复][摘要]国家认证认可监督管理委员会,用于正常工作的一个重要ORACLE数据库,存储于LINUX EXT3文件系统之上。一次,管理员在建立测试库时选错了…

网站国际互联网备案号用nas做网站

6月11日,山东省教育厅举行2021年第一次高考新闻发布会,介绍2021年高考基本情况、评卷安排、成绩公布等相关工作。山东省教育招生考试院新闻发言人、普招处处长李春光介绍,根据近期国家有关工作要求和强基计划招生工作需要,原定于6…

烟台哪里做网站学风建设网站

好的,我在select字段上有一个onchange事件。它现在很棒。当下拉“网络”更改时,它会刷新第二个下拉列表。我还希望顶部的ajax代码在页面加载和onchange上触发,以便填充第二个列表。这是因为它在编辑页面上。这是使用第一个的ajax调用function…

合肥网站建设制作价格手机网站首页经典案例

1.注意点: 该题递推公式为斐波那契数列,而n达到50,是非常大的数 , 故应用循环代替递归,同时记录数据 同时用long long数组储存 ​​ 2.注意点:初始化起点,切忌重新递归找数 可以直接初始化所…

专业仿站网站建设爱佳倍 北京网站

1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 2> 自行封装一个循环顺序队列的类,包含…

做电影网站如何推广方案WordPress网站属于什么网站

“/CommonHelpServices”应用程序中的server错误。ServiceHost 仅支持类服务类型。说明: 运行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的具体信息。异常具体信息: System.ArgumentException…

成都武侯区建设厅官方网站中国建设银行网站个人客户官网

0 工具准备 1.EtherCAT主站 2.EtherCAT从站(本文使用步进电机驱动器) 3.Wireshark1 抓包分析 1.1 报文总览 本文设置从站1的对象字典,设置对象字典主索引为0x2000,子索引为0x00,设置值为1500。主站通过发送SDO写报文…

宜春建设局网站施工企业的安全生产责任制度

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JavaScript简介&引入方式 简介&#xf…

设计一个完整的静态网站wordpress 小工具 开发

一、钢筋机械连接介绍1、钢筋机械连接在连接区段内接头率的规定(35d):★接头宜设置在结构构件中受拉应力较小的部位,当需要在高应力部位设置时,在同一连接区段内Ⅲ接头的接头率不应大于25%,Ⅱ接头率不应大于50%,Ⅰ接头…

微商城网站建设怎么样c2c网站建设实例

一.流量控制 1.1 较高的发送速度和较低的接收能力的不匹配,因此流量控制也是数据链路层的一项重要工作。 1.2 数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。 1.3 数据链路层流量控制手段:接收方收不下就不回复确认。 传…

网站开发报价表的文档软件开发工程师证书含金量

一、简介 它的官网为:https://ffmpeg.org/,由Fabrice Bellard(法国著名程序员Born in 1972)于2000年发起创建的开源项目。该人是个牛人,在很多领域都有很大的贡献。 FFmpeg是多媒体领域的万能工具。只要涉及音视频领…

大连市城乡建设厅网站搜索引擎推广的费用

dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪&#xff0c;把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态&#xff1a;出现了一些修改&#xff0c;但是还没有提交 对于Java来说&#xff0c;.cl…

u nas 建设网站超市设计网站

一、考情分析 二、考点精讲 2.1嵌入式系统概述 2.1.1基本概念 (1)嵌入式系统是以应用为中心、以计算机技术为基础,并将可配置与可裁剪的软、硬件集成于一体的专用计算机系统&#xff0c;需要满足应用对功能、可靠性、成本、体积和功耗等方面的严格要求。 (2)从计算机角度看,嵌…

网站建设的项目总结专业做化妆品的网站

之前搭建了整个开发环境实现了登录注册&#xff0c;springBoot整合mybatis完成增删改查&#xff0c;今天完成分页查询&#xff0c;使用阿里云oss存储照片等资源&#xff0c;后期会尝试自己搭建分布式文件系统来实现。 一&#xff0c;SpringBootMybatis完成分页查询 1&#xff…

网站假设公司排名windows系统安装wordpress

RPC RPC 框架是分布式领域核心组件&#xff0c;也是微服务的基础。 RPC &#xff08;Remote Procedure Call&#xff09;全称是远程过程调用&#xff0c;相对于本地方法调用&#xff0c;在同一内存空间可以直接通过方法栈实现调用&#xff0c;远程调用则跨了不同的服务终端&a…

深达网站制作深圳公司广东圆心科技网站开发需要多少钱

因为需求需要重建EM,重建时因为某些错误被迫停止,比如对象已存在、用户已经存在等,最终找出了创建必备的条件&#xff1b;1.环境变量(Oracle和Grid在同一个用户下安装):ORACLE_HOME 要设为DB路径;ORACLE_UNQNAME 要设置;2.删除em相关的同义词:select drop public synonym ||syn…

网站后台管理系统模板下载做网站用到什么开发语言

描述 KiKi想知道他的考试分数是否通过&#xff0c;请帮他判断。从键盘任意输入一个整数表示的分数&#xff0c;编程判断该分数是否在及格范围内&#xff0c;如果及格&#xff0c;即&#xff1a;分数大于等于60分&#xff0c;是输出“Pass”&#xff0c;否则&#xff0c;输出“…

怎样建设一个公司网站公司做网站需要准备哪些资料

[css] ::first-letter有什么应用场景&#xff1f; 段落首字放大效果p:first-letter {font-size: 2em; }<p>This is a test article. This is a test article.</p> <p>这是一个测试</p>个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放…

ae如何做视频模板下载网站广告创意设计文案

https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/转载于:https://www.cnblogs.com/adolfmc/p/7238893.html