# telltao-netty-action **Repository Path**: telltao/telltao-netty-action ## Basic Information - **Project Name**: telltao-netty-action - **Description**: 我的netty进阶之路 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-23 - **Last Updated**: 2021-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # telltao-netty-action 我的netty进阶之路 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。以分布式系统为例: ##### 同步和异步关注的是消息通信机制(synchronous communication) - **同步** :就是在发出一个`调用`时,在没有得到结果之前,该`调用`就不返回。但是一旦调用返回,就得到返回值了。 - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话未挂断,一分钟后,告诉小刘,我找到了!这就是同步。 也就是说 由`调用者`主动等待这个`调用`的结果。 - **异步**: `调用`在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在`调用`发出后,`被调用者`通过状态、通知来通知调用者,或通过回调函数处理这个调用。 - 小刘给小明打电话帮我找本《暗访十年》,小明挂断电话去寻找,一分钟后,打电话给小刘说:我找到了!这就是异步。 也就是说 由`调用`主动通知这个`调用者`的结果。 ##### 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态. - **阻塞:** 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。 - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话未挂断,此时小刘只能等着结果,他不能再接听其他电话了。 - **非阻塞:** 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话未挂断,此时小刘能去接杯水,一边玩儿去了,当然,也要过几分钟询问一下小明找到没有,直至小明返回结果。 #### 总结 ##### 同步/异步是从行为角度描述事物的,而阻塞和非阻塞描述的当前事物的状态(等待调用结果时的状态)。 - **同步阻塞** - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话未挂断,此时小刘只能拿着电话等着小明找到书。 - **异步阻塞** - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话已经挂断,此时小刘只能拿着电话等着小明的回话。 - **同步非阻塞** - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话未挂断,此时小刘还去给自己倒了杯水,然后继续等着小明的回话。 - **异步非阻塞** - 小刘给小明打电话帮我找本《暗访十年》,小明去找去了,电话已挂断,此时小刘去接杯水,一边玩儿去了,小刘也要过几分钟询问一下小明找到没有(回调函数),直至小明返回结果。