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

图盛网站建设wordpress文章文件

图盛网站建设,wordpress文章文件,百家号官网,wordpress 显示IO#xff0c;英文全称是 Input/Output#xff0c;翻译过来就是输入/输出。我们听得挺多#xff0c;就是磁盘 IO#xff0c;网络 IO 等。IO 即输入/输出#xff0c;到底谁是输入#xff1f;谁是输出#xff1f;IO 如果脱离了主体#xff0c;会让人疑惑。 计算机角度的…        IO英文全称是 Input/Output翻译过来就是输入/输出。我们听得挺多就是磁盘 IO网络 IO 等。IO 即输入/输出到底谁是输入谁是输出IO 如果脱离了主体会让人疑惑。 计算机角度的 IO 我们常说的输入输出比较直观的意思就是计算机的输入输出计算机就是主体。计算机分成分为 5 个部分运算器、控制器、存储器、输入设备、输出设备。输入设备是向计算机输入数据和信息的设备键盘鼠标都属于输入设备输出设备是计算机硬件系统的终端设备用于接收计算机数据的输出显示一般显示器、打印机属于输出设备。 操作系统角度的 IO 我们要将内存中的数据写入到磁盘的话那么主体就是一个程序。操作系统负责计算机的资源管理和进程的调度我们电脑上跑着的应用程序其实是需要经过操作系统才能做一些特殊操作如磁盘文件读写、内存的读写等等。 真正的 IO 是在操作系统执行的。即应用程序的 IO 操作分为两种动作IO 调用和 IO 执行。IO 调用是由进程应用程序的运行态发起而 IO 执行是操作系统内核的工作。 应用程序发起的一次 IO 操作包含两个阶段 IO 调用应用程序进程向操作系统内核发起调用。 IO 执行操作系统内核完成 IO 操作。 IO 模型 阻塞 IO 假设应用程序的进程发起 IO 调用但是如果内核的数据还没准备好的话那应用程序进程就一直在阻塞等待一直等到内核数据准备好了从内核拷贝到用户空间才返回成功提示此次 IO 操作称之为阻塞 IO。 阻塞 IO 比较经典的应用就是阻塞 socket、Java BIO。阻塞 IO 的缺点就是如果内核数据一直没准备好那用户进程将一直阻塞浪费性能可以使用非阻塞 IO 优化。 非阻塞 IO 如果内核数据还没准备好可以先返回错误信息给用户进程让它不需要等待而是通过轮询的方式再来请求,这就是非阻塞 IO。 非阻塞 IO 的流程如下 1.应用进程向操作系统内核发起 recvfrom( )读取数据。 2.操作系统内核数据没有准备好立即返回 EWOULDBLOCK 错误码。 3. 应用程序进程轮询调用继续向操作系统内核发起 recvfrom 读取数据。 4.操作系统内核数据准备好了从内核缓冲区拷贝到用户空间。 5.完成调用返回成功提示。 recvfrom() 用来接收远程主机经指定的 socket 传来的数据并把数据传到由参数 buf 指向的内存空间。非阻塞 IO 模型简称 NIONon-Blocking IO。它相对于阻塞 IO虽然大幅提升了性能但是它依然存在性能问题即频繁的轮询导致频繁的系统调用同样会消耗大量的 CPU 资源。 IO 多路复用 既然 NIO 无效的轮询会导致 CPU 资源消耗我们等到内核数据准备好了主动通知应用进程再去进行系统调用。 IO 复用模型核心思路系统给我们提供一类函数如 select、poll、epoll它们可以同时监控多个 fd 的操作任何一个返回内核数据就绪应用进程再发起 recvfrom() 系统调用。 文件描述符 fd(File Descriptor)它是计算机科学中的一个术语形式上是一个非负整数。当程序打开一个现有文件或者创建一个新文件时内核向进程返回一个文件描述符用来表示相关文件信息。 select 应用进程通过调用 select 函数可以同时监控多个 fd在 select 函数监控的 fd中只要有任何一个数据状态准备就绪了select 函数就会返回可读状态这时应用进程再发起 recvfrom( )请求去读取数据。select 的 IO 多路复用模型只需要发起一次询问就够了大大优化了性能。 但是select 有几个缺点监听的 IO 最大连接数有限在 Linux 系统上一般为 1024kb。select 函数返回后是通过遍历 fdset找到就绪的描述符 fd仅知道有 I/O 事件发生却不知是哪几个 FD所以遍历所有 FD。因为存在大量遍历,所以会有连接数限制所以后来又提出了 poll。与 select 相比poll 解决了连接数限制问题。但是select 和 poll 一样还是需要通过遍历 FD 来获取已经就绪的 socket。如果同时连接大量客户端在一时刻可能只有极少处于就绪状态伴随着监视的描述符数量的增长效率也会线性下降。因此经典的多路复用模型 epoll 诞生。 epoll 为了解决 select/poll 存在的问题多路复用模型 epoll 诞生它采用事件驱动来实现。epoll 先通过 epoll_ctl() 来注册一个 fd一旦基于某个 fd 就绪时内核会采用回调机制迅速激活这个 fd当进程调用 epoll_wait()时便得到通知。这里去掉了遍历文件描述符的坑爹操作而是采用监听事件回调的机制。这就是 epoll的亮点。 select、poll、epoll 的区别 selectpollepoll底层数据结构数组链表红黑树和双链表获取就绪的 fd遍历遍历事件回调事件复杂度O(n)O(n)O(1)最大连接数1024无限制无限制fd 数据拷贝每次调用 select需要将 fd 数据从用户空间拷贝到内核空间每次调用 poll,需要将 fd 数据从用户空间拷贝到内核空间使用内存映射(mmap),不需要从用户空间频繁拷贝 fd 数据到内核空间 异步 IO 前面讲的 BIONIO在数据从内核复制到应用缓冲的时候都是阻塞的因此 AIO 实现了 IO 全流程的非阻塞就是应用进程发出系统调用后是立即返回的但是立即返回的不是处理结果而是表示类似提交成功的意思。等内核数据准备好将数据拷贝到用户进程缓冲区发送信号通知用户进程 IO 操作执行完毕。 异步 IO 的优化思路很简单只需要向内核发送一次请求就可以完成数据状态询问和数据拷贝的所有操作并且不用阻塞等待结果。日常开发中有类似思想的业务场景比如发起一笔批量转账但是批量转账理比较耗时这时候后端可以先告知前端转账提交成功等到结果处理完再通知前端结果即可。 一个生活中经典例子 BIO 小明去吃饭就这样在那里排队等了一小时轮到她了然后才开始吃饭。 package IO;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;public class BIODemo1 {public static void main(String[] args) throws IOException, InterruptedException {ServerSocket serverSocket new ServerSocket(9999, 1024);System.out.println(服务器启动);while (true) {Socket socket serverSocket.accept();}}}package IO;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class BIODemo2 {public static void main(String[] args) throws IOException, InterruptedException {//创建线程池ThreadPoolExecutor executor new ThreadPoolExecutor(50,50, 200,TimeUnit.MILLISECONDS,new ArrayBlockingQueue(20),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());ServerSocket serverSocket new ServerSocket(9999, 1024);System.out.println(服务器启动);while (true) {Socket socket serverSocket.accept();System.out.println(socket 连接到服务器);executor.execute(() - {//执行任务});}}}package IO;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;/*** BIO模拟NIO*/ public class BIODemo3 {public static void main(String[] args) throws IOException, InterruptedException {ListSocket list new ArrayList();ServerSocket serverSocket new ServerSocket(9999, 1024);System.out.println(服务器启动);while (true) {// 设置非阻塞 serverSocket.set不阻塞Socket socket serverSocket.accept(); // 不管接到接不到继续向下执行// 判断有没有接到if (socket ! null) { // 没有人连接到服务器// 虽然没有人连接,但是有可能有人发送消息,此时也需要处理.// 循环集合中的socket} else { // 有人连接到服务器System.out.println(socket 连接到服务器);list.add(socket);// 循环集合中的socket}}}}NIO 小红也去吃饭她一看要等挺久的于是去逛会商场每次逛一下就跑回来看看是不是轮到她了。于是最后她既购了物又吃上饭了。 package IO;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public class NIODemo1 {public static void main(String[] args) throws IOException {FileInputStream in new FileInputStream(E:/source.txt);FileOutputStream out new FileOutputStream(E:/dest.txt);FileChannel inchannel in.getChannel();FileChannel outchannel out.getChannel();ByteBuffer byteBuffer ByteBuffer.allocate(1024);while (inchannel.read(byteBuffer) ! -1) {byteBuffer.flip();outchannel.write(byteBuffer);byteBuffer.clear();}}}package IO;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set;/*NIO完整写法*/ public class NIODemo2 {public static void main(String[] args) throws InterruptedException, IOException {ListSocketChannel list new ArrayList();ServerSocketChannel serverSogketChannel ServerSocketChannel.open();//创建服务器serverSogketChannel.bind(new InetSocketAddress(9999), 1024);serverSogketChannel.configureBlocking(false);//设置非阻塞//注册选择器Selector selector Selector.open();//创建选择器serverSogketChannel.register(selector, SelectionKey.OP_ACCEPT);//向selector注册管道System.out.println(启动服务器);for (; ; ) {selector.select();SetSelectionKey selectionKeys selector.selectedKeys();//返回所有选择器接收到的操作IteratorSelectionKey iterator selectionKeys.iterator();while (iterator.hasNext()) {SelectionKey selectionKey iterator.next();if (selectionKey.isAcceptable()) {//连接ServerSocketChannel serverSockChannel (ServerSocketChannel) selectionKey.channel();SocketChannel acceptSocketChannel serverSockChannel.accept();System.out.println(acceptSocketChannel.getRemoteAddress());acceptSocketChannel.configureBlocking(false);acceptSocketChannel.register(selector, SelectionKey.OP_WRITE);}if (selectionKey.isWritable()) {//写SocketChannel socketChannel (SocketChannel) selectionKey.channel();String resp 响应;try {Thread.sleep(500);socketChannel.write(ByteBuffer.wrap(resp.getBytes()));} catch (Exception e) {e.printStackTrace();}}if (selectionKey.isReadable()) {//读SocketChannel channel (SocketChannel) selectionKey.channel();ByteBuffer buffer ByteBuffer.allocate(1024);int length channel.read(buffer);String msg server receive msg: new String(buffer.array(), 0, length);System.out.println(msg);}iterator.remove();}}} }AIO 小华一样去吃饭由于他是高级会员所以店长说你去商场随便逛会吧等下有位置我立马打电话给你。于是小华不用干巴巴坐着等也不用每过一会儿就跑回来看有没有等到最后也吃上了饭。
http://www.hkea.cn/news/14506923/

相关文章:

  • 荣成网站建设阿里云注销网站
  • 网站做自动群发百度搜录wordpress 菜单加图标
  • seo网站结构图东莞设计网站企业
  • 网站制作公司的流程小程序制作需要营业执照吗
  • 百度推广 网站要备案吗电影网站建设的程序
  • 买了一个域名怎么做网站深圳最穷的三个区
  • 网站建设网页设计公司抖音代运营开票内容是什么
  • 网页设计作业网站湖北网站推广方案
  • 电子商务成功网站的案例高淳 网站建设
  • 搜索引擎是软件还是网站网站排行榜上升代码
  • 网站内容更新用什么设计页面尺寸图
  • 南京网站制作价格浙江网站备案
  • 招标网站开发文档上海网站建设公司站霸网络
  • 二级网站怎么建设小型企业网站开发
  • 电子商务网站建设与管理 笔记济宁网站优化公司
  • 开封网站建设流程网站建设合同中的违约责任
  • 大连网站优化快速排名建设银行上海分行招聘网站
  • 如何用asp编写网站后台高质量的常州网站建设
  • 未来做哪些网站能致富html代码特效
  • 容桂网站建设原创英文网站建设详细方案
  • 密云网站建设服务上海网站建设推广
  • 深圳做网站做app一个网站的主题和设计风格
  • 自学网页设计的网站学做网站需要什么条件
  • 周村网站制作首选公司seo教程技术优化搜索引擎
  • 登录企业网站管理系统Seo与网站推广的技术对比
  • 网站免费源代码成都微信网站建设报价单
  • 信誉好的企业网站建设天津网站建设案例教程
  • 建网站后如何运营中山网站建设如何
  • 凯里网络公司建设网站开发小网站排名
  • wordpress建站中英文企业网站搭建价格