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

wordpress如何加菜单在运营中seo是什么意思

wordpress如何加菜单,在运营中seo是什么意思,wordpress 简书风格,asp网站免费完整源码前言我们的Web应用多多少少都会处理一些静态内容#xff0c;需要先从磁盘中读取到数据#xff0c;在不经过修改后将此数据写入到套接字#xff0c;伪代码如下#xff1a;read(file, tmp_buf, len);write(socket, tmp_buf, len);虽然看似简单#xff0c;但是它的效率却不高…前言我们的Web应用多多少少都会处理一些静态内容需要先从磁盘中读取到数据在不经过修改后将此数据写入到套接字伪代码如下read(file, tmp_buf, len);write(socket, tmp_buf, len);虽然看似简单但是它的效率却不高因为在这两个调用之后数据已经被至少复制了四次并且执行了大概相同数量的用户/内核态上下文切换那么啥是用户/内核态呢用户态是指当程序运行在3级特权级上时因为这是最低特权级是普通的用户进程运行的特权级反过来当程序运行在0级特权级上时就可以称之为运行在内核态。而为了使应用程序访问到内核管理的资源内核必须提供一组通用的访问接口这些接口就叫系统调用当我们需要做IO操作如open、read、write、就需要通过系统调用来和内核进行交互但是系统调用的开销很大要尽量减少系统调用的次数因为系统调用会从用户态进入到内核态用户态和内核态的频繁切换会消耗大量的CPU资源会影响数据传输的性能。用户态切换到内核态的还有俩种方式异常和外围设备的中断。那这里特权又是指什么从80286处理器开始Intel引入了保护模式特权级就是保护模式中的一个重要概念操作系统的核心代码运行在最高特权级(0特权级)上而用户程序运行在最低特权级(3特权级上)特权级1、2一般用于运行系统服务程序。对于上面的例子我们可以把他分为以下几个步骤read会进行系统调用将导致上下文从用户模式切换到内核模式然后由DMA从磁盘读取文件内容并将数据存储到内核地址空间缓冲区中。将数据从内核缓冲区复制到用户缓冲区然后read系统调用返回导致上下文从内核切换回用户模式。write系统调用导致上下文从用户模式切换到内核模式执行第三次复制将数据放入内核地址空间缓冲区这次是将数据放入另一个缓冲区中这个缓冲区专门与套接字关联。write系统调用返回。可以看出首先内核读出磁盘中数据然后将数据跨越内核推到应用程序应用程序再次跨越内核将数据推回写出到套接字。在这里应用程序实际上担当了一个中介角色即将磁盘文件的数据转入套接字所以在内核上下文和应用程序上下文之间复制数据是多余的那么有什么办法可以将数据直接从内核上下文复制到内核上下文呢答案就是使用零拷贝零拷贝技术可以使内核直接将数据从磁盘文件拷贝到套接字而无需通过应用程序这不仅大大地提高了应用程序的性能而且还减少了内核与用户模式间的上下文切换。说简单一点就是避免CPU将数据从一块存储拷贝到另外一块存储减少不必要的拷贝Java 中零拷贝技术transferTo我们可以通过java.nio.channels.FileChannel中的transferTo()方法来在Linux系统上进行零拷贝transferTo()方法直接将字节从它被调用的通道上传输到另外一个可写字节通道上数据无需流经应用程序在内部它依赖底层操作系统对零拷贝的支持Linux系统中会被传递到sendfile()系统调用中sendfile不仅减少了数据复制还减少了上下文切换可以将上下文切换次数从四次减少到两次数据拷贝的次数从四次减少到三次。步骤如下sendfile系统调用使DMA引擎将文件内容复制到内核缓冲区中然后在被内核复制到与套接字关联的内核缓冲区中。DMA将Socket缓冲区拷贝到网卡buffer中。public class Test{public static void main(String[] args){long l  System.currentTimeMillis();transferTo(/home/HouXinLin/apps/gradle/gradle-6.1.1-all.zip, /home/HouXinLin/temp.zip);System.out.println(System.currentTimeMillis() - l);}private static void stream(String src, String dest){try {BufferedInputStream bufferedInputStream  new BufferedInputStream(new FileInputStream(new File(src)));BufferedOutputStream bufferedOutputStream  new BufferedOutputStream(new FileOutputStream(new File(dest)));byte[] temp  new byte[2048];int size  0;while ((size  bufferedInputStream.read(temp))  0) {bufferedOutputStream.write(temp, 0, size);}bufferedInputStream.close();bufferedOutputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private static void copy(String src, String dest){try {Files.copy(Paths.get(src), new FileOutputStream(new File(dest)));} catch (IOException e) {e.printStackTrace();}}private static void transferTo(String src, String dest){try {FileChannel readChannel  FileChannel.open(Paths.get(src), StandardOpenOption.READ);FileChannel writeChannel  FileChannel.open(Paths.get(dest), StandardOpenOption.WRITE, StandardOpenOption.CREATE);readChannel.transferTo(0, readChannel.size(), writeChannel);readChannel.close();writeChannel.close();} catch (Exception e) {e.printStackTrace();}}}经过测试其他两种方式平均都在上百毫秒以上(文件大小138.5MB)而transferTo都在50多毫秒。map在说map方法前先说说什么是mmapmmap是Linux提供的一种内存映射文件方法mmap系统调用使DMA引擎将文件内容复制到内核缓冲区中然后与用户进程共享缓冲区就不需要在内核和用户内存空间之间执行任何复制。mmap就是代替了read操作。tmp_buf  mmap(file, len);write(socket, tmp_buf, len);这样的话我们可以减少了内核复制数据量的一半当传输大量数据时这种方式有很棒的效果但是这种方式是有缺陷的存在隐患在内存中映射文件时当另一个进程将同一个文件截断时那么write系统调用会因为访问非法地址被SIGBUS信号终止SIGBUS默认会杀死进程服务器可能因此被终止。FileChannel.map方法可以把一个文件从position位置开始的size大小的区域映射为内存映像文件返回MappedByteBufferMappedByteBuffer继承于ByteBuffermap方法底层是通过mmap实现的因此将文件内存从磁盘读取到内核缓冲区后用户空间和内核空间共享该缓冲区。他有三个参数分别为MapMode、Position、sizeMapMode映射的模式可选项包括READ_ONLYREAD_WRITEPRIVATE。Position从哪个位置开始映射字节数的位置。Size从position开始向后多少个字节。private static void map(String src, String dest){try {FileChannel readChannel  FileChannel.open(Paths.get(src), StandardOpenOption.READ);MappedByteBuffer map  readChannel.map(FileChannel.MapMode.READ_ONLY, 0, readChannel.size());FileChannel writeChannel  FileChannel.open(Paths.get(dest), StandardOpenOption.WRITE, StandardOpenOption.CREATE);writeChannel.write(map);readChannel.close();writeChannel.close();} catch (Exception e) {e.printStackTrace();}}这种速度也非常快经过测试和transferTo方法一样。零拷贝给我们带来的好处减少甚至完全避免不必要的CPU拷贝从而让CPU解脱出来去执行其他的任务减少内存带宽的占用通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换查看系统调用在程序访问硬件设备如读取磁盘文件接收网络数据等等时必须将用户态模式切换至内核态模式通过系统调用访问硬件设备而strace就可以跟踪到这个进程产生的系统调用,包括参数返回值执行消耗的时间。我们将上面的程序打包成jar然后执行如下命令strace java -jar Demo.jar从输出中可以看到内部会调用mmap这个函数。
http://www.zqtcl.cn/news/440905/

相关文章:

  • 广东律师事务所东莞网站建设做网站 怎么备案
  • shopnc本地生活o2o网站源码wordpress文章内多页效果
  • 深圳全国网站制作哪个好页面设计有哪几种风格
  • 网页设计作业网站素材和效果图夏天做啥网站致富
  • 利用帝国软件如何做网站网站友链交换平台
  • 简述网站开发技术深圳网站设计合理刻
  • wordpress网站名称寻找销售团队外包
  • 一浪网站建设网页qq邮箱
  • 做网站需要注册公司吗夫唯seo系统培训
  • 沈阳人流哪个医院好安全百度关键词优化怎么做
  • 1688网站怎么做分销高质量的网站内容建设
  • 网站建设公司济宁网站转跳怎么做
  • 镇江网站设计多少钱企业网络部署方案
  • 建网站的公司浩森宇特wordpress登录缓存
  • 便宜建站空间战队头像在线制作免费
  • 做招聘网站赚钱吗厦门网站建设哪里好
  • 新乡网站建设哪家公司好阿里巴巴做国际网站多少钱
  • 怎么在悉尼做网站dede做手机网站
  • 企业网站模板免费下载品牌建设专家库推荐表
  • 辽宁智能网站建设推荐网络营销推广方案创意
  • 安阳做一个网站多少钱东营做网站公司
  • 深圳市罗湖网站建设百度自助建站官网
  • 网站开发安装环境网站建设销售话术
  • 网站权重网站栏目划分的原则
  • 国际网站建设的目的我的百度账号登录
  • 温州网站设计定制博客和网站的区别
  • 益阳建设网站wordpress加载图片慢
  • 网站官网阜新网站开发公司
  • 适合做网站的图片印刷公司网站模板
  • 南昌哪家网站建设最好网站建设的方法有