非阻塞IO pipelines是一组处理非阻塞IO的链式组件,它包括以一种非阻塞的方式读和写IO。
组件使用Selector来检查何时一个Channel有数据可以读取。然后该组件读取输入数据并生成一些输出数据,这些输出数据被写入Channel。 非阻塞IO pipelines有时候会超过一个组件来处理数据,它的长度根据它的用处。一个非阻塞IO pipelines有时可以同时读取多个Channels。
“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。 | |
1.同步与异步 | |
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) | |
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。 | |
换句话说,就是由*调用者*主动等待这个*调用*的结果。 | |
而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。 | |
典型的异步编程模型比如Node.js |
Java线程与操作系统中轻量级进程是一一对应的关系。 为了实现并发,可以创建多个线程,如何管理这些线程,可使用线程池的方式。 当多个线程对同一资源进行访问时,可能会出现不一致的情况, 为了防止这种情况的发生可以使用锁的方式,或者当该资源是原子类时,也能保证同一时刻只有一个线程访问该资源。
Java内存模型是围绕着并发过程中如何处理原子性、可见性、有序性这三个特征来建立的:
Java Enum is a type like class and interface and can be used to define a set of Enum constants. Enum constants are implicitly static and final and you can not change their value once created. Enum in Java provides type-safety and can be used inside switch statement like int variables.
Benefits:
公司的dev团队有些类似固定数目线程池,每个开发人员相当于其中的一个线程:
ps:
一个Promise对象代表一个目前还不可用,但是在未来的某个时间点可以被解析的值。它允许你以一种同步的方式编写异步代码。
Promise有三种状态:
Promise的一种实现方式: