高性能的服务器,Reactor 是一种非常见的模式。Nginx, NodeJS, eventmachine, twisted 都使用了这种模式来实现高性能的服务器。
- 为什么 Reactor 能够实现高性能服务器?
- 怎么实现 Reactor?
- Reactor 到底是同步还是异步?
| 知识系统分为三个层次 | |
| * 书籍 | |
| * 文章 | |
| * 卡片 | |
| 自己的知识分享 从片段的卡片开始,这样降低输出的门槛。 | |
| 一开始,可以坚持写三张卡片: 反常识卡,人名卡,术语卡。 |
| import com.querydsl.jpa.impl.JPAQuery; | |
| import graphql.schema.DataFetcher; | |
| import graphql.schema.DataFetchingEnvironment; | |
| import graphql.schema.GraphQLList; | |
| import graphql.schema.GraphQLObjectType; | |
| import lombok.Builder; | |
| import lombok.RequiredArgsConstructor; | |
| import lombok.Value; |
| buildscript { | |
| repositories { | |
| maven { | |
| url "https://plugins.gradle.org/m2/" | |
| } | |
| mavenCentral() | |
| } | |
| dependencies { | |
| classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE") | |
| classpath "gradle.plugin.net.franz-becker:gradle-lombok:1.5" |
| # built application files | |
| *.apk | |
| *.ap_ | |
| # files for the dex VM | |
| *.dex | |
| # Java class files | |
| *.class |
| // Use Gists to store code you would like to remember later on | |
| console.log(window); // log the "window" object to the console |
| import Foundation | |
| import AVFoundation | |
| import CoreImage | |
| protocol SequenceReadable { | |
| func readNext() -> CIImage | |
| } | |
| protocol YMSticky { | |
| func stickOn(background: YMImage) -> YMImage |
| -(AVVideoComposition *)squareCropperVideoComposition:(AVAssetTrack *)clipVideoTrack { | |
| AVMutableVideoComposition * videoComposition = [AVMutableVideoComposition videoComposition]; | |
| CGSize originVideoSize = clipVideoTrack.naturalSize; | |
| CGFloat shortSideLength = MIN(originVideoSize.width, originVideoSize.height); | |
| CGFloat longSideLength = MAX(originVideoSize.width, originVideoSize.height); | |
| CGFloat renderSideLength = 640.0; // MIN(640.0, shortSideLength); | |
| CGFloat scale = renderSideLength / shortSideLength; | |
| /* sample code, 实现不完整. 可能要用service实现, 但是接口相同 */ | |
| // 先不用去想怎么实现, 先想我在Activity和UI会怎么用 audio player | |
| // 1. 因为需要能够自动切换到下一首, 所以生成播放器需要一个播放列表 | |
| // 2. 在播放的时候, UI需要根据播放器的状态显示不同的UI, 所以需要监听AudioPlayer的状态 | |
| // 3. 因为需要能够播放任意一首歌曲, 需要play(int index) | |
| public class AudioListPlayer { | |
| // 我们在UI上只需要这四个状态, 那么就只监听这些状态 |