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

移动商城 网站建设方法方式wordpress添加豆列

移动商城 网站建设方法方式,wordpress添加豆列,乐陵seo网站,化妆品网站建设实施背景多线程多路复用 多线程NIO#xff0c;#xff0c;就是多个线程#xff0c;每个线程上都有一个Selector#xff0c;#xff0c;#xff0c;比如说一个系统中一个线程用来接收请求#xff0c;#xff0c;剩余的线程用来读写数据#xff0c;#xff0c;每个线程独立干自…多线程多路复用 多线程NIO就是多个线程每个线程上都有一个Selector比如说一个系统中一个线程用来接收请求剩余的线程用来读写数据每个线程独立干自己的事 一个线程的多路复用虽然不会卡住但是执行单个事件的时间过长也会长时间卡在那里需要开启多个线程但是多个线程中执行代码的顺序是不可控的一般是在主线程接收到一个新的连接之后再用子线程中的Selector去关注返回的SocketChannel, selector.select()是在子线程中执行的关注事件是在主线程执行的如果子线程中的selector.select()先阻塞住了关注事件的代码就必须等到有新的事件到来才会往下执行 如果子线程想要监听到这个事件注册事件的代码就必须在 selector.select()阻塞的代码的前面但是这个是不可控的就需要使用selector.wakeup() 唤醒这个selector.select() 阻塞唤醒了之后后面关注事件的代码就执行了后面监听到这个关注事件就会去处理 public class MultiThreadServer {public static void main(String[] args) throws IOException {Thread.currentThread().setName(boss);ServerSocketChannel ssc ServerSocketChannel.open();ssc.configureBlocking(false);Selector boss Selector.open();SelectionKey bossKey ssc.register(boss, 0, null);bossKey.interestOps(SelectionKey.OP_ACCEPT);ssc.bind(new InetSocketAddress(8080));// 可用的核心数 》 如果在docker上拿到的是物理cpu个数而不是容器申请时的个数在jdk10才修复int i1 Runtime.getRuntime().availableProcessors();Worker[] workers new Worker[2];for (int i 0; i workers.length; i) {workers[i] new Worker(worker-i);}AtomicInteger index new AtomicInteger(0);while (true){boss.select();IteratorSelectionKey iter boss.selectedKeys().iterator();while (iter.hasNext()){SelectionKey key iter.next();iter.remove();if (key.isAcceptable()){SocketChannel sc ssc.accept();System.out.println(客户端已进入sc);sc.configureBlocking(false);System.out.println(before register...);// 轮询选择器选择一个线程执行workers[index.getAndIncrement() % workers.length].register(sc);// worker01.register(sc);// 前面初始化 selector.select()阻塞了 // SelectionKey scKey sc.register(worker01.selector, 0, null); // scKey.interestOps(SelectionKey.OP_READ);System.out.println(after register...); // sc.register()}}}}static class Worker implements Runnable{private Thread thread;private Selector selector;private String name;private ConcurrentLinkedQueueRunnable queue new ConcurrentLinkedQueue();private volatile boolean start false;// 是否初始化public Worker(String name) {this.name name;}// 初始化线程和Selectorpublic void register(SocketChannel sc) throws IOException {if (!start){selector Selector.open();thread new Thread(this,name);thread.start();start true;}queue.add(()-{try {sc.register(selector,SelectionKey.OP_READ);} catch (ClosedChannelException e) {throw new RuntimeException(e);}});selector.wakeup();// sc.register(selector,SelectionKey.OP_READ); // // 唤醒阻塞 阻塞住了下面的register就无法到达 // selector.wakeup();}Overridepublic void run() {while (true){try {selector.select();// 最开始的时候 run如果先执行queue里面是空的注册逻辑放在select()前面也是一样不会将 socketChannel注册进去 需要唤醒Runnable task queue.poll();if (task ! null){task.run();}IteratorSelectionKey iterator selector.selectedKeys().iterator();while (iterator.hasNext()){SelectionKey key iterator.next();iterator.remove();if (key.isReadable()){ByteBuffer buffer ByteBuffer.allocate(16);SocketChannel channel (SocketChannel) key.channel();channel.read(buffer);System.out.println(Thread.currentThread().getName()name);debugAll(buffer);}else if(key.isWritable()){}}} catch (IOException e) {throw new RuntimeException(e);}}}} }名词 阻塞IO 用户线程会一直等待直到数据准备好才返回就是线程停止等待数据 非阻塞IO 用户程序空间 到 操作系统的内核空间 》 操作系统会立即返回用户线程始终在运行并没有停下来 多路复用 通过Selector监测事件检测到有事件就会到操作系统内核空间去执行 同步 线程自己去获取结果 异步 线程自己不去获取结果由另一个线程送结果 至少有两个线程 异步IO 异步都是非阻塞的一个线程执行通过另一个线程返回结果 阻塞IO是同步的也叫同步阻塞 非阻塞IO也是同步的,也叫同步非阻塞 多路复用也是同步的只是将所有的事件都集中到一起处理 零拷贝 一般的文件读取都是要经过内核空间 到 用户空间 再从用户空间 拷贝到 缓冲区, 一个文件要拷贝很多次才能发送出去 而零拷贝 就是让文件拷贝不再经过用户空间直接就用操作系统内核空间里面的数据。。 零拷贝适合那种小文件拷贝因为大文件会占用很多内核缓冲区可能会影响别的IO操作 // 堆外内存(direct buffer) 直接分配在堆外的内存减少从堆内存到直接内存的拷贝 ByteBuffer buffer ByteBuffer.allocateDirect(1024);AIOAsynchronous IO 异步输入输出 非阻塞IO需要一个回调函数去传递 执行完成之后返回的结果 public class Demo01 {/*** linux 对异步IO不友好 底层只是用多路复用模拟了一个异步IO性能上没有优势* window系统通过IOCP实现了真正的异步IO***/public static void main(String[] args) throws IOException, InterruptedException {CountDownLatch countDownLatch new CountDownLatch(1);// 异步IO必须是多个线程一个线程发起一个线程送结果Path path Paths.get(/Users/chenjie/code/learn/learn-netty/learn-netty/netty01/src/main/resources/word.txt);System.out.println(Files.exists(path));try (AsynchronousFileChannel channel AsynchronousFileChannel.open(path, StandardOpenOption.READ)) {ByteBuffer buffer ByteBuffer.allocate(8);ByteBuffer attachBuffer ByteBuffer.allocate(8);System.out.println(read begin:Thread.currentThread().getName());/*** params: ByteBuffer* params2: 读取的起始位置* params3: 附件 万一一次读不完需要一个bytebuffer接着读* params4: 真正结果出来了调用这个回调方法*/channel.read(buffer,0,attachBuffer,new CompletionHandlerInteger, ByteBuffer(){Overridepublic void completed(Integer result, ByteBuffer attachment) {// 当你的文件正确读取完毕后attachment.flip();debugAll(attachment);System.out.println(Thread.currentThread().getName()hehe);countDownLatch.countDown();}Overridepublic void failed(Throwable exc, ByteBuffer attachment) {System.out.println(exc exc);System.out.println(exc.getMessage()e);}});System.out.println(read finished);countDownLatch.await();} catch (IOException e) {throw new RuntimeException(e);}}}
http://www.w-s-a.com/news/313268/

相关文章:

  • 响应式网站 价格网站用哪些系统做的比较好用
  • 高端网站案例360做的网站
  • 瑞安地区建设网站公众号开发者工具是干嘛的
  • 请解释网站开发的主要流程.wordpress主体上传
  • 网站方案组成要素饰品公司网站建设方案
  • 网站改版被降权赣州景文网络科技有限公司
  • 吉林省网站建设推广图片模版
  • 如何做网站热力图佛山 网站关键词优化
  • 个人网站建设论文中期报告申报网站建设理由 模板
  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道