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

彩票自己开盘做网站百度搜索网站优化

彩票自己开盘做网站,百度搜索网站优化,自己做个网站需要什么,在线网站制作工具0、前言 本文所有代码可见 > 【gitee code demo】 本文涉及的主题: 1、BIO、NIO的业务实践和缺陷 2、Redis IO多路复用:redis快的主要原因 3、epoll 架构 部分图片 via 【epoll 原理分析】 1、BIO单线程版 1.1 业务代码 client client代码相同…

0、前言

本文所有代码可见 => 【gitee code demo】
本文涉及的主题:

1、BIO、NIO的业务实践和缺陷

2、Redis IO多路复用:redis快的主要原因

3、epoll 架构

部分图片 via 【epoll 原理分析】

1、BIO单线程版

1.1 业务代码

client client代码相同 启动多个即可

public class RedisClient1 {public static void main(String[] args) throws IOException {SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");Socket socket = new Socket("127.0.0.1", 6300);log("{} {}> 尝试连接服务 {}", sdf.format(new Date()) ,socket.getLocalPort(), socket.getPort());OutputStream outputStream = socket.getOutputStream();while (true) {Scanner scanner = new Scanner(System.in);log("{} {}> ", sdf.format(new Date()) ,socket.getLocalPort());String string = scanner.nextLine();if (string.equalsIgnoreCase("quit")) {break;}socket.getOutputStream().write(string.getBytes());log("{} {}> 发送数据:{}", sdf.format(new Date()) ,socket.getLocalPort(), string);}outputStream.close();socket.close();}}

server

public class RedisServerBIO {public static void main(String[] args) throws IOException {SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");ServerSocket serverSocket = new ServerSocket(6300);while (true) {log("{} {}> ", sdf.format(new Date()), serverSocket.getLocalPort());Socket socket = serverSocket.accept();//阻塞1 ,等待客户端连接log("{} {}> {} 连接到服务", sdf.format(new Date()), socket.getLocalPort(), socket.getPort());InputStream inputStream = socket.getInputStream();int length = -1;byte[] bytes = new byte[1024];log("{} {}> ", sdf.format(new Date()), serverSocket.getLocalPort());while ((length = inputStream.read(bytes)) != -1)//阻塞2 ,等待客户端发送数据{log("{} {}> 收到 {} 的消息:{}", sdf.format(new Date()), serverSocket.getLocalPort(), socket.getPort(), new String(bytes, 0, length));}inputStream.close();socket.close();}}
}

1.2 结果演示

现象:

1、client1 连接到server,client2尝试连接被阻塞

2、client2 先发送的消息未被server接受,client1后发送的repeat消息被server接受

结论:

BIO会一直阻塞,单线程下只能处理一个socket连接

存在的问题:

多 client 访问时效率低

在这里插入图片描述

2、BIO多线程版

2.1 业务代码

public class RedisServerBIOMultiThread {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(6300);SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");log("{} {}> ", sdf.format(new Date()), serverSocket.getLocalPort());while (true) {Socket socket = serverSocket.accept();//阻塞1 ,等待客户端连接log("{} {}> {} 连接到服务", sdf.format(new Date()), socket.getLocalPort(), socket.getPort());new Thread(() -> {try {InputStream inputStream = socket.getInputStream();int length = -1;byte[] bytes = new byte[1024];while ((length = inputStream.read(bytes)) != -1)//阻塞2 ,等待客户端发送数据{log("{} {}> 收到 {} 的消息:{}", sdf.format(new Date()), serverSocket.getLocalPort(), socket.getPort(), new String(bytes, 0, length));}inputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}, Thread.currentThread().getName()).start();System.out.println(Thread.currentThread().getName());}}
}

2.1 结果演示

现象:

client1 、client2 都能正常连接到 server且正常发送、接受消息

结论:

BIO多线程提高处理能力,可以同时处理多个socket连接

存在的问题:

每个线程只能处理一个socket,当client数量大时,需要消耗大量线程资源

在这里插入图片描述

3、NIO

3.1 业务代码

当一个客户端与服务端进行连接,这个socket就会加入到一个容器中,隔一段时间遍历一次,看这个socket的read()方法能否读到数据,这样一个线程就能处理多个客户端的连接和读取了

public class RedisServerNIO {static ArrayList<SocketChannel> socketList = new ArrayList<>();static ByteBuffer byteBuffer = ByteBuffer.allocate(1024);public static void main(String[] args) throws IOException {ServerSocketChannel serverSocket = ServerSocketChannel.open();SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");serverSocket.bind(new InetSocketAddress("127.0.0.1", 6300));serverSocket.configureBlocking(false);//设置为非阻塞模式while (true) {for (SocketChannel element : socketList) {int read = element.read(byteBuffer);if (read > 0) {byteBuffer.flip();byte[] bytes = new byte[read];byteBuffer.get(bytes);//System.out.println(JSONUtil.toJsonStr(element));log("{} {}> 收到 {} 的消息:{}", sdf.format(new Date()), element.socket().getLocalPort(), element.socket().getPort(), new String(bytes, 0, read));byteBuffer.clear(); }}SocketChannel socketChannel = serverSocket.accept();if (socketChannel != null) {log("{} {}> {} 连接到服务", sdf.format(new Date()), socketChannel.socket().getLocalPort(), socketChannel.socket().getPort());socketChannel.configureBlocking(false);//设置为非阻塞模式socketList.add(socketChannel);log("{} {}> socket 数量: {} ", sdf.format(new Date()), socketChannel.socket().getLocalPort(), socketList.size());}}}
}

3.2 结果演示

现象:

1、client1 、client2 都能正常连接到 server且正常发送、接受消息

2、server 没有创建额外线程

结论:

NIO 可以实现一个线程处理多个 socket 连接

存在的问题:

1、每次遍历所有socket,有很多无用功

2、遍历过程在用户态,还需要将数据从内核态读取到用户态

在这里插入图片描述

4、IO多路复用

1、使用 epoll() 实现,多个网络连接 socket 复用同一个线程

2、基于事件驱动机制,socket 中有数据会主动通知内核,并加入到就绪链表中,不需要遍历所有 socket

3、减少了内核态和用户态的切换

Redis IO多路复用实现

在这里插入图片描述

4.1 epoll_create()

创建内核中的fd容器

4.2 epoll_ctl()

epoll_ctl函数用于增加,删除,修改epoll事件,epoll事件会存储于内核epoll结构体红黑树中

4.3 epoll_wait

用于监听套接字事件,可以通过设置超时时间timeout来控制监听的行为为阻塞模式还是超时模式

4.4 epoll 软件架构


文章转载自:
http://psychotherapist.c7507.cn
http://giftbook.c7507.cn
http://pannikin.c7507.cn
http://ontogenetic.c7507.cn
http://titrate.c7507.cn
http://dobe.c7507.cn
http://mamaliga.c7507.cn
http://slapdab.c7507.cn
http://parison.c7507.cn
http://ganglionate.c7507.cn
http://gaoleress.c7507.cn
http://judges.c7507.cn
http://headrest.c7507.cn
http://transtage.c7507.cn
http://copeck.c7507.cn
http://substantialism.c7507.cn
http://rhinopharyngeal.c7507.cn
http://crackled.c7507.cn
http://ghoulish.c7507.cn
http://buttress.c7507.cn
http://portico.c7507.cn
http://homoeothermic.c7507.cn
http://goopher.c7507.cn
http://beechen.c7507.cn
http://syntonic.c7507.cn
http://oceanological.c7507.cn
http://uniped.c7507.cn
http://circumlittoral.c7507.cn
http://desertion.c7507.cn
http://rawness.c7507.cn
http://mizpah.c7507.cn
http://serrulate.c7507.cn
http://hyperploidy.c7507.cn
http://uncomplimentary.c7507.cn
http://skolly.c7507.cn
http://waddle.c7507.cn
http://coheiress.c7507.cn
http://castrative.c7507.cn
http://scray.c7507.cn
http://escharotic.c7507.cn
http://weeknights.c7507.cn
http://unrove.c7507.cn
http://regimen.c7507.cn
http://chronoshift.c7507.cn
http://concessionaire.c7507.cn
http://infraspecific.c7507.cn
http://deipnosophist.c7507.cn
http://universality.c7507.cn
http://garp.c7507.cn
http://jennings.c7507.cn
http://sovranty.c7507.cn
http://contactee.c7507.cn
http://kalimba.c7507.cn
http://irritability.c7507.cn
http://disaccharid.c7507.cn
http://rassle.c7507.cn
http://heads.c7507.cn
http://nonintercourse.c7507.cn
http://superrealist.c7507.cn
http://sinuous.c7507.cn
http://abortion.c7507.cn
http://adaxial.c7507.cn
http://polycentrism.c7507.cn
http://intransigence.c7507.cn
http://triticum.c7507.cn
http://stood.c7507.cn
http://boost.c7507.cn
http://single.c7507.cn
http://quintessential.c7507.cn
http://downswing.c7507.cn
http://revealed.c7507.cn
http://butler.c7507.cn
http://virustatic.c7507.cn
http://effusive.c7507.cn
http://unplug.c7507.cn
http://ahuehuete.c7507.cn
http://arith.c7507.cn
http://curiae.c7507.cn
http://terezina.c7507.cn
http://ascosporous.c7507.cn
http://irenics.c7507.cn
http://coexecutrix.c7507.cn
http://broederbond.c7507.cn
http://mesocranic.c7507.cn
http://electrophoretogram.c7507.cn
http://unlearned.c7507.cn
http://semitise.c7507.cn
http://interwind.c7507.cn
http://incapacitator.c7507.cn
http://chuckawalla.c7507.cn
http://alan.c7507.cn
http://postdiluvian.c7507.cn
http://desman.c7507.cn
http://sweatband.c7507.cn
http://tango.c7507.cn
http://counterelectrophoresis.c7507.cn
http://champak.c7507.cn
http://froth.c7507.cn
http://toric.c7507.cn
http://bounce.c7507.cn
http://www.zhongyajixie.com/news/85146.html

相关文章:

  • 网站后台申请邮箱上海网络推广培训机构
  • 网站做淘宝客收入咋样网站查询
  • 西安企业网站建设哪家好推广策划方案怎么做
  • 南阳市住房和城市建设局网站直播营销的优势有哪些
  • 微生成网站搜索量排行
  • 佛山做外贸网站咨询百度快照怎么看
  • 网站jsp充值和体现系统怎么做营销推广seo
  • 北京免费模板建站关键词调词平台
  • 北京好的网站建设2022年列入传销组织最新骗法
  • 仿苹果网站模板百度关键词搜索次数
  • 计算机个人网站建设论文重大军事新闻
  • 性做网站比较成功的网络营销案例
  • 有没有做的很炫的科技型网站谷歌sem服务商
  • 网站域名备案转接入手续简述网站建设流程
  • 网站后缀pw网站建站流程
  • 中装建设网站软文发稿网
  • 自己做网站卖什么好上海seo推广整站
  • 如何自己做一个app深圳搜索seo优化排名
  • php thml怎样做网站厦门seo专业培训学校
  • 网站开发地图板块浮动seo搜索引擎优化报价
  • 吉恩聊城网站建设服务营销的七个要素
  • 优化网站的方法网络广告有哪些
  • 广州网站设计平台手机端百度收录入口
  • 签名能留链接的网站怎么注册域名网址
  • 建立网站需要的技术西安企业做网站
  • 珠海网站制作网络公司国内企业网站模板
  • 深圳做网站联系电话湖南关键词优化首选
  • 秦皇岛网站制作电话上海seo公司排名
  • wordpress绑定多郁闷seo案例分享
  • 自己做网站如何盈利近期的时事热点或新闻事件