Netty权威指南(第2版) 6.5分
读书笔记 2.2 伪异步I/O编程
Gimo

为了解决同步阻塞I/O的一个连接需要一个线程的问题,提出的线程池技术。 设置线程池的最大值,防止由于海量并发接入导致线程耗尽。 当有新的客户端接入,将其Socket封装为一个Task,投递到后端线程池,JDK线程池维护一个消息队列和N个活跃线程,对消息队列的任务进行处理。由于可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的。 复习《Java并发编程实战》的线程池一章感觉没什么效果,继而复习马士兵老师的高并发关于线程池的视频: Executor 接口 只有一个方法void executor(Runnable command) command是任务 任务的具体执行自己写实现 1. 直接调用Runnable的run()方法,r.run() 2. new Thread(r).start() ... ExecutorService extends Executer 接口 两个方法 submit(Runnable task) submit(Callable<T> task) Callable 接口 call() 和Runnable的run()很像,设计思想都是被一个线程调用的,run()方法没有返回值,不能抛出异常,而call()方法有返回值。 需要返回值的时候用Callable。 Executors 操作Executor的一个工具类,跟Collections一样 工厂方法以及工具方法,操作Executor等等一些类 伪异步I/O弊端分析 InputStream 当对Socket的输入流进行读取操作的时候,会一直阻塞下去,直到有如下三种事件发生: 1. 有数据可读 2. 可用数据已经读取完 3. 发生空指针或者I/O异常 读写都是同步阻塞的,取决于对方I/O线程的处理速度和网络I/O的传输速度。

0
《Netty权威指南(第2版)》的全部笔记 23篇
豆瓣
我们的精神角落
免费下载 iOS / Android 版客户端