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

淘宝关键词查询工具中山网站优化营销

淘宝关键词查询工具,中山网站优化营销,网站关键词排名怎么做,河北省建设执业注册中心网站传统网络编程存在的问题 传统网络编程存在以下问题#xff1a; 线程创建开销#xff1a;在Java中#xff0c;创建线程需要调用操作系统API#xff0c;这会消耗资源和时间。内存占用高#xff1a;线程本身占用内存#xff0c;创建过多线程会导致内存资源紧张。CPU使用率…传统网络编程存在的问题 传统网络编程存在以下问题 线程创建开销在Java中创建线程需要调用操作系统API这会消耗资源和时间。内存占用高线程本身占用内存创建过多线程会导致内存资源紧张。CPU使用率高线程在等待时需要进行上下文切换这会增加CPU的负担。 改进使用线程池 优点可以减少线程频繁创建、销毁的开销。缺点线程池中的线程可能会因为客户端处理时间长而被阻塞导致资源浪费。 再改进使用 NIO 网络通信非阻塞编程。 优势NIO 网络编程也是使用线程池但是它是非阻塞的。这就解决了线程池版网络编程中的阻塞问题。 BIO、NIO和AIO的区别 BIO、NIO和AIO是Java中网络编程的三种不同的I/O模型它们各自有不同的特点和适用场景。以下是它们的主要区别 BIOBlocking I/O阻塞I/O在BIO模型中服务器为每个客户端连接都创建一个线程来处理这意味着每个线程都是阻塞的即在等待I/O操作完成时线程会被挂起直到操作完成。 优点是模型简单易于理解和使用。 缺点是当客户端数量增多时线程数量也会线性增加这会导致资源消耗大性能下降特别是在高并发场景下。 NIONon-blocking I/O非阻塞I/ONIO是Java 1.4版本引入的它支持面向缓冲区的I/O操作可以更高效地处理数据。NIO使用缓冲区Buffer和通道Channel来进行数据的读写而不是使用传统的流Stream。 它支持非阻塞模式可以通过Selector来管理多个Channel一个线程可以同时处理多个Channel的I/O请求。 优点是减少了线程的创建和销毁提高了资源利用率和系统吞吐量。 AIOAsynchronous I/O异步I/OAIO是Java 7版本引入的它支持真正的异步I/O操作。 在AIO模型中I/O操作是异步的当发起一个I/O请求后系统会立即返回不会阻塞当前线程当I/O操作完成时系统会通过回调函数来通知应用程序。 优点是进一步提升了性能减少了线程的阻塞时间提高了系统的响应速度。 NIO 如何实现同步非阻塞的 NIO 包含3个核心组件Channel通道、Buffer缓冲区、Selector选择器监管者。 Channel ChannelNIO 中的 Channel 是通信的管道类似于InputStream、OutputStream。用于读取和写入数据。因为Channel没有方向性所以Buffer为了区分读写引入了读模式、写模式进行区分。 Channel本身不能直接访问数据只能与Buffer进行交互所有的数据都是通过Buffer进行交互的。 Buffer Channel读取或者写入的数据都要写到Buffer中才可以被程序操作。因为Channel没有方向性所以Buffer为了区分读写引入了读模式、写模式进行区分。 最常用的是ByteBuffer。 NIO包中有多种Channel的实现 FileChannel用于读取、写入、映射和操作文件的通道。DatagramChannel能通过UDP读写网络中的数据。SocketChannel能通过TCP读写网络中的数据。ServerSocketChannel可以监听新进来的TCP连接对每一个新进来的连接都会创建一个SocketChannel。 半包、粘包 在NIO中Buffer是NIO中存放数据的地方。假设在客户端发送了三句话服务端接收数据时计算机无法理解文本本身的含义它只会按照Buffer设置的容量来截断数据此时就会出现粘包、半包问题。比如下图 粘包包含完整的一句话但又包含了其他句子的部分第一次读取的数据为 Hi sunshuai\nI l发现此次接收的数据包含了第一句、第二句的部分这种情况就是粘包。半包一句话只读取到了部分第二次读取时对于第二句I love you\n本次只读取了ove you\n对于第三句Do you love me?\n只读取了Do you 。像这种Buffer中包含第二句的结尾和第三句的开头这就是半包。 处理办法 将句子进行特殊处理比如以\n作为结束标志。在读取的时候读取到\n就知道是一句完整的话。使用 compact()方法 进行处理把第一次没有读取完的数据向前移动和后面的内容进行整合。 Seletor选择器循环监听事件 在不使用Seletor时需要不断的进行while()循环来进行监听客户端的连接、数据发送等动作。 而使用Seletor之后Seletor就相当于一个监管者它负责监控是否有客户端发送连接、客户端是否发送数据了。如果有再去执行代码这样就不用一直傻傻的where死循环了。 Seletor并不是时时刻刻都处于监管状态而是达到某些特殊的状态时才会触发监管。这些特殊状态有一般只在服务端使用 ACCEPT即 服务端同意了客户端的连接他们建立连接的时候。》ServerSocketChannelREAD、WRITEIO 通信的读写。》SocketChannel 时 Selector 的主要操作 创建监管者Selector selector Selector.open(); 指定被监控对象这里会监控serverSocketChannel的ACCEPT 连接状态 SelectionKey selectionKey serverSocketChannel.register(selector, 0, null); selectionKey.interestOps(SelectionKey.OP_ACCEPT); 进入阻塞等待模式selector.select(); 只有当监控到了 有实际的连接 或者 读写操作 才会处理。 reactor 模式 上面的 selector 作为监管者监控服务端的ServerSocketChannel、所有客户端的SocketChannel【多路复用】。对服务端进行读、写操作的监控。 会发现selector 既要监控客户端的连接动作还要监控 读、写动作效率比较低。reactor 将连接器、读写操作分别使用不同线程来负责这样效率就会提升。 主线程负责连接器工作从子线程负责与客户端进行读写的交互操作。 零拷贝 NIO 之所以快主要是它使用了零拷贝。接下来讲讲零拷贝为什么快。 普通的IO操作 首先要知道一个Java 程序在内存中是分为用户区存储用户程序用到的何种数据、内核区内核空间为内核保留是与操作系统打交道的区域。具体到 java 程序中JVM 中的内存对应用户区域的地址空间、操作系统中的内存就对应内核区的地址空间。 而Java程序在IO操作时时需要4次数据拷贝的 读取文件【两次数据拷贝】 先调用驱动程序将 物理硬盘中的文件数据 拷贝到 操作系统的高速页缓存中 然后再将 高速页缓存 中文件数据 拷贝到 用户地址空间的应用缓存 中。 通过网络 发送数据【两次数据拷贝】 先将用户地址应用缓存的数据 写入拷贝至 操作系统的 socket 缓存中 然后再将socket 缓存中的数据 写入拷贝至 网卡中。 改进内存映射 在NIO中可以调用内存映射相关的API。内存映射就是可以将 JVM 中的堆内存 与 操作系统内存 之间映射此时 JVM 中 java 程序就直接操作的是 OS操作系统中的内存。 不足内存映射只是优化了 读取 的操作。而写操作依然需要经过 JVM 内存 -- 操作系统内存 -- 网卡。 再改进零拷贝 零拷贝是指没有 JVM 参与的拷贝。只有操作系统与硬件之间的拷贝零拷贝是 linux 内核实现的功能。具体如下 linux2.1中的零拷贝sendFile()物理硬盘 ---》高速页缓存 --》socket 缓存--》网卡。进行了3次拷贝。linux2.4中的零拷贝sendFile()物理硬盘 ---》高速页缓存--》网卡。只用2次拷贝。 因此零拷贝速度快。 Netty Netty是一个NIO客户服务器框架它能够快速和容易地开发网络应用如协议服务器和客户端。它大大精简了网络编程如TCP和UDP套接字服务器。 Netty 是基于JAVA NIO类库其架构特点是异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。 事件驱动是指服务端监控不同的事件如accept、read、write。事件驱动的核心是依附于Selector来实现的。异步是指 Worker 处理客户端的请求IO 操作时让其他线程来完成具体的任务而 Worker 本身可以继续接收其他客户端的请求。 》这种设计思路提升了效率。 Netty的用途在分布式系统中通常是跨进程交互的需要通过网络通信。NIO虽然可以进行网络通信但是NIO存在以下问题 API复杂难用比如 Buffer的“指针”需要来回切换。存在半包、粘包问题。网络拥塞需要自己解决。 Netty 的心跳机制 TCP中也有类似的机制保活机制。 首先开启保活机制。 探测过程 如果在一段时间内没有数据传输TCP 会发送一个保活探测报文给对端。这个探测报文通常是一个简单的 ACK 报文不包含实际的数据。如果对端正常存活它会回复一个 ACK 报文。这样连接就被认为是正常的保活计时器会被重置。如果对端没有回复TCP 会在一定的时间间隔后再次发送探测报文。经过多次尝试后如果仍然没有收到回复TCP 就会认为对端已经断开连接并关闭连接。 为什么有了TCP保活机制还需要 Netty 的心跳机制呢 答 因为 TCP 保活机制 是作用在运输层的心跳机制 是作用在 应用层上的。如果运输层没问题但应用层有问题就检测不出来。例如连接的双方网络正常TCP 保活机制确保了双方是正常的但是程序本身出现了问题如死锁导致双方无法通信。因此才有了 Netty 的心跳机制。它作用在应用层也就是说如果心跳机制检测双方处于活跃状态就说明在 应用层、运输层 连接的双方都是活跃的。 Netty 的内存管理 Netty 中的内存相关是通过ByteBuf来实现的。Netty 中的ByteBuf 是对 NIO 的 ByteBuffer封装Netty 网络通信过程中底层数据是存储在ByteBuf中。 ByteBuf 的特点 可以自动扩容提供读写的指针方便操作。ByteBuffer中没有读写指针所以才需要进行 读模式、写模式的切换引入了内存的池化类似于 连接池、线程池对ByteBuf 的操作中引入了 零拷贝。netty 中的零拷贝 不是不占用内存而是尽可能的少占用内存 创建ByteBuf如果不指定大小netty 会默认分配256字节。ByteBuf最大可为Integer.MAX_VALUE。在ByteBuf中一个字符占 1 字节一个 Int 类型占 4 字节。 ByteBuf 扩容规律 当容量小于 64 时扩容规律为4 的 n 次方。其实也就是4、16、64当容量超过 64 时扩容规律为原有大小*2。但不可超过ByteBuf的最大值Integer.MAX_VALUE。 ByteBuf 的内存结构 ByteBuffer中需要来回切换 读、写模式。在ByteBuf中没有读、写模式了不用来回切换。而是使用读、写指针。 ByteBuf 的内存释放 ByteBuf 的内存释放①使用池化技术时内存释放是将内存放回内存池中并没有销毁②不使用池化技术时如果使用堆内存而没使用直接内存内存释放是否立即销毁 需要看 GC 的处理。 由于 Netty 在处理内存释放时考虑到内存释放的情况复杂Netty 让编程人员使用时设计了统一的内存释放的接口。它是通过使用RefrenceCounted接口实现的。RefrenceCounted引用计数器当ByteBuf的引用计数器为 0 时表示ByteBuf可以被回收。 Netty 和 Tomcat 的区别 功能定位 Netty是一个异步事件驱动的网络应用程序框架主要用于构建高性能的网络通信服务器和客户端。Tomcat是一个 Java Web 应用服务器主要用于运行 Java Servlet 和 JavaServer PagesJSP等 Web 应用程序。 处理协议 Netty可以处理多种网络协议不仅限于 HTTP还包括自定义协议等。Tomcat主要针对 HTTP 协议进行处理也可以支持其他协议可以通过插件等方式扩展但对其他协议的支持相对较弱。 使用场景 Netty适用于需要自定义网络通信协议、对性能要求极高的场景如金融交易系统的通信中间件、游戏服务器等。Tomcat主要用于部署和运行 Java Web 应用如企业内部管理系统、电子商务网站等。
http://www.w-s-a.com/news/40057/

相关文章:

  • 公司被其它人拿来做网站郑州哪家做网站最好
  • 山东省建设厅官方网站抖音代运营业务介绍
  • 网站制作 牛商网wordpress商城 微信支付
  • 平面设计培训网站建文帝网站建设
  • python网站建设佛山乐从网站建设
  • 网站 免费 托管运营app软件大全
  • 爱网站找不到了网站设计制作要交印花税
  • 分销平台是什么意思网站如何从行为数据进行优化
  • 做网站公司职务做民俗酒店到哪些网站推荐
  • 从0到建网站wordpress导航主题模板下载地址
  • 以3d全景做的网站统计网站的代码
  • 北辰网站建设WordPress换主题文件夹
  • 做网站的合同范文百度分析工具
  • 深圳企业网站制作公司单位注册wordpress发送邮件
  • 兰州专业网站建设团队wordpress 拉取点击数
  • 基于php房产网站开发ppt模板免费下载第一ppt
  • 网站盈利模式分析怎么做山东营销网站建设联系方式
  • 二级网站建设 知乎我的个人主页模板
  • wordpress小说网站模板下载地址百度优化服务
  • 云南网页设计制作seo计费系统源码
  • 屏蔽ip网站吗行业外贸网站建设
  • 河北城乡建设学校网站常州网站建设公司平台
  • 合肥网站建设市场分析网站收录后怎么做排名
  • 湖南企业网站建设如何推广手机网站
  • 网站建设项目经历网站推广服务 商务服务
  • 加强网站的建设福州seo排名外包
  • 做婚庆找什么网站有专门为个人网站做推广的吗
  • 网站搭建要求模板学编程需要英语基础吗
  • 网上如何建网站卖量具净水机企业网站源码
  • 网站推广 软件规划设计公司年终总结