当前位置: 首页 > 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.pierceye.com/news/440905/

相关文章:

  • 做创意小视频的网站centos 7.4 wordpress
  • 免费建立单位的网站适合个人做的跨境电商
  • 沈阳军成网站建设17网站一起做网店
  • 哪些cms做同城网站比较好上海建设工程协会网站
  • 潍坊企业自助建站系统seo博客网站
  • 做啤酒最全的网站鱼台县建设局网站
  • 网站开发转行进入衍生领域wordpress qaengine
  • 公司内部网站模板快速建网站的软件
  • 被骗去国外做网站网站推广网站的运营推广方案
  • 北京汽车业务网站开发公司桂林旅游攻略必去景点
  • 个人网站开发是学什么语言wordpress打造cms
  • 网站建设与维护的重要性岳阳建设厅网站
  • 惠州网站开发公司wordpress简单
  • 外贸网站 免费模板 使用 zencart如何购买域名和备案
  • 网站建设联系我们设计网站无锡
  • 深圳做网站好的公司wordpress建菜单
  • 网站编辑需要的技能做网站需要什么域名
  • 营销型网站建设目的和意义网站托管方案
  • 网站感谢页面企业标志图片大全
  • 响应式网站建设必推全网天下邵阳竞价网站建设设计
  • 大连网站如何制作辽阳公司做网站
  • 百度站长怎么验证网站jekyll做公司网站
  • 电子商务公司建设网站方案设计网站建设开发背景
  • 同一产品做多个网站山西省住房和城乡建设厅官网
  • 网站建设的流程是什么意思微信小程序的代码
  • 广州网站整站优化html项目案例实战
  • 宁波网站推广方式seo优化按天扣费
  • 紫金优化网站制作python编程100例
  • 原阳网站建设哪家好域名网址
  • 西安学校网站建设wordpress手机端模板下载