网站设计怎么边加载变查看/网络推广有哪些渠道

网站设计怎么边加载变查看,网络推广有哪些渠道,网站制作与维护费用,广东东莞疫情最新动态在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来…

在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK1.5开始,NIO API作为一个基于缓存区,并能提供非阻塞IO操作的API被引入。 
NIO所在的包为java.nio,其中的n表示non-blocking。但实际上我们可以把它理解为nio=new+io,因为NIO包实现了网络通信和I/O的联合功能,并将它们的结合发挥到极致,实现完美的网络非阻塞通信功能。 
NIO结构图

  • NIO引入:分析普通Socket通信中存在的I/O问题——阻塞通信,并分析传统的解决方法——线程池的优缺点,进而引入NIO解决方案: 
    ①基于Socket通信存在的问题:I/O阻塞通信。 
    在介绍NIO之前,先了解传统I/O操作的方式。以网络应用为例,下图描述了一个典型的网络服务器结构的通信过程: 
    传统网络IO操作过程 
    椭圆形内的操作会循环进行,并且监听连接、读取数据、写入数据的操作都是阻塞的。在ServerSocket类的生存期中,其重要功能如下:

  • 首先创建ServerSocket:

    //启动服务端:ServerSocket server= new ServerSocket(12345);
  • 然后接受新的连接请求:
//监听客户端while(true){Socket socket = server.accept();   //阻塞监听}

对accept()的调用将一直阻塞,直到ServerSocket接受到一个连接请求为止。一旦请求连接被接受,服务器可以读取客户Socket中的输入/输出数据,在读取调用时也会阻塞。下面的代码演示了这个过程:

//输入输出流
BufferReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
//读取数据
String line;//垃圾字符串
while((line=is.readLine())!=null){//读阻塞//回复数据os.println(line);//写阻塞os.flush();
}

在监听的位置accept()会被阻塞,并且在读写客户端数据时也会阻塞。因此这样的操作共造成了3个问题: 
a、accept()方法的调用将造成阻塞,直到ServerSocket接受到一个连接请求位置; 
b、BufferedReader类的readLine()方法在其缓存区未满时将会造成线程阻塞,只有数据足够填满缓存区或者客户端关闭了套接字时,方法才会返回。 

c、产生大量的String垃圾,BufferedReader创建了缓存区从客户套接字读入数据,但是同样创建了一些字符串存储这些数据。虽然BufferedReader内部提供了StringBuffer处理,但是所有的String很快变成了垃圾需要回收,同样的问题在发送消息代码中也存在。 
其中第一个问题是ServerSocket造成的阻塞,第二个问题是BufferedReader缓存造成的阻塞,第三个问题是String造成的垃圾。因此,以上的问题是Java I/O和Java网络通信共同造成的。 
②传统的解决方法:使用线程池。 
在JDK 1.4之前,自由使用线程池是处理阻塞问题最典型的办法。面对大量的客户端的请求,需要使用大量的线程,这时一般是实现一个线程池来处理请求,如图: 
线程池方式处理 
使用线程池的方法是:在服务端启动时创建线程池,当监听到客户端连接时,就为客户端创建一个线程,并将该线程放入线程池中即可。这样在该客户断开连接时,该客户端的处理线程就会被归还到线程池中,以提高线程的池化管理,提高线程的使用效率。实例代码如下:

public class TestThreadPool{public static void main(String args[]){boolean flag = true;try{//创建线程池ExecutorService pool = Executors.newFixedThreadPool(10);//启动服务器ServerSocket server = new ServerSocket(12345);System.out.println("开始监听");while(true){//接受客户端连接Socket socket = server.accept();//为客户端创建一个独立线程pool.execute(new ServiceThread(socket));}//关闭server.close();pool.shutdown();}catch(IoException e){e.printStackTrace();}}
}

线程池使服务器可以处理多个连接,但是它们也同样引发了许多问题。每个线程拥有自己的栈空间并且占用一些CPU时间,耗费很大,而且很多时间是浪费在阻塞的IO操作上,没有有效利用CPU。 
③最新的解决方案:NIO非阻塞通信。 
从上面的分析可以看出,采用线程池的解决方法也会产生它自己的问题——线程开销,线程开销同时也影响性能和可伸缩性。不过,随着NIO的到来,一切都改变了。 
NIO的非阻塞IO机制是围绕选择器和通道构建的。Channel类表示服务器和客户机直接的一种通信机制。与反应器模式一致,Selector类是Channel的多路复用器。Selector类将传入客户机请求多路分用,并将它们分派到各自的请求处理程序,实现对客户端请求事件的非阻塞监听,如下图: 
NIO通信过程 
在椭圆形区域中,Selector监听器负责轮循客户端的连接、读取和写入事件,这些事件的执行都不会被阻塞。并且为了提高执行的效率,NIO在读取和写入的数据中使用了缓存区。

转发:https://blog.csdn.net/luliuliu1234/article/details/61914097

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

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

相关文章

Nginx----基础

静态资源服务 通过本地文件系统提供服务:对css,js文件,图片等静态文件 反向代理服务 缓存:将一些数据经常不变的,缓存到Nginx中,直接给用户提供服务 负载均衡 api服务 OpenResty 数据库的服务比较简单&…

深入理解JVM—JVM内存模型

我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成…

Nginx----进阶

用Nginx搭建一个静态的web资源服务器/动静分离 简单使用 1、可以在安装的nginx目录新建自己的目录zy(和conf在一个目录下,也就是和html目录在一个目录下,注意如果使用/zy,那么zy目录需要创建在linux根目录)&#xff0c…

小程序·云开发的HTTP API调用丨实战

小程序云开发之httpApi调用。 小程序云开发之httpApi调用(返回“47001处理”) 技术栈 采用 nodejs express 搭建web服务器,采用 axios 请求第三方 httpApi nodejsexpressaxios 项目结构 通过应用生成器工具 express-generator 可以快速创建一…

Zookeeper----基本原理

Zookeeper作用是什么? 协调分布式系统中的多个服务器,使得系统可以正常工作。 Zookeeper提供了什么? 实际上他只提供了三个东西,一个是文件系统,一个是通知机制,还有一个是集群管理机制 Zookeeper可以做什么…

spgridview的过滤功能回调时发生错误~

代码中启用了过滤功能, 但当点击过滤的列时发生错误: error: spgridview_filtercallbackerrorhandler() was called - result 回调时发生错误... 详细见: HTML代码: AllowFiltering"True"FilterDataFields",Name,,…

web---SSL/TSL

对称加密 加密算法秘钥(双方持有相同的秘钥),A使用加密算法秘钥加密文件,B使用加密算法秘钥解密文件; 演示一个对称加密RC4算法 注意:RC4加密是有漏洞的 明文和秘钥进行异或得到密文,密文和秘钥…

Nginx----实现https站点

1、首先给域名设置证书,可以去阿里云购买 1、下载自动化脚本 目的:帮我们自动在nginx配置中添加证书 yum install python2-certbot-nginx2、输入命令 certbot --nginx --nginx-server-root/usr/local/openresty/nginx/conf/ -d zy.com 选择我们的url请求…

TCP/IP四层模型和OSI七层模型的概念

TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。 TCP/IP通讯协议采用了4层的层级结构&…

setsockopt()用法(转载)

1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用 closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,…

《深入浅出Google Android》即将隆重上市!

《深入浅出 Google Android 》 作者在线答疑活动开始啦 :http://www.hiapk.com/bbs/forum-41-1.html 随着越来越多的手机 厂商和移动运营商加入了开放手机联盟, Android 平台 越来越受到广大开发 者的关注和推崇。 本书是是国内最早的 And…

公钥基础设施PKI体系介绍

PKI(Pubic Key Infrastructure)是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。用户可利用PKI平台提供的服务进行安全通信。 使用基于公钥技术系统的用户建立安全通信信任机制的基础是:网上进行的任何需要安全服务的通信都是建…

Flag counter被博客园禁了的解决方法

突然发现Flag counter展示不出来 一开始还以为是网速的问题,后来搜了搜才知道博客园把Flag counter禁了....之前的访问量全没了5555(虽然也没多少) 只好换一个记录访问量的好了:https://clustrmaps.com/ 进去之后创建账户 把网址贴…

Nginx----高级

Nginx请求流程 Nginx进程结构 Nginx有两种进程结构,一种是单进程(可以用于测试),一种是多进程(用于生产,默认) Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(work…

基于Zookeeper的分布式锁

实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开。我们来看下使用Zookeeper如何实现分布式锁。 什么是Zookeeper? Zookeeper(业界简…

web----epoll实现原理

epoll可以用单进程单线程实现高并发 首先我们可以实现单进程单线程实现高并发(模拟非阻塞IO请求) 服务端 //服务端 public class BlockNIOServer {public static void main(String[] args) throws IOException, InterruptedException {//获取通道ServerS…

web----tcp三次握手

1、首先为什么需要握手 首先我们看一下TCP报文段的结构 TCP报文段中的窗口这16位字段部分,这里窗口的作用就是为了实现流量的控制,为什么会有流量的控制的引入???它是这样来的:若是发送方发送数据的速度大于…

吉他谱----see you again

指弹谱 转载于:https://www.cnblogs.com/yanxiaoge/p/11567740.html

一棵大树好乘凉

2004.5.6 发表于加西 【光的演绎, 风光篇】 转载于:https://www.cnblogs.com/chahua/archive/2009/07/14/1523160.html

吉他谱----再见

弹唱 转载于:https://www.cnblogs.com/yanxiaoge/p/11568911.html