主从线程模型
说明:
- 图中有m个acceptor线程,一个acceptor对应多个processor线程。此类线程接收客户端连接请求并创建socketChannel,然后将socketChannel以轮询方式加入到processor的newConnections队列中。
- processor为I/O线程,负责网络I/O读写。processor线程监听到OP_READ后会创建request并加入到requestQueue中。processor线程监听到OP_WRITE后会将responseQueue中的消息发送到客户端。
- 整个过程中只有一个RequestChannel,其中包含RequestQueue和ResponseQueue。一个processor对应一个ResponseQueue,多个processor公用一个RequestQueue。
- processor线程会将读request加入到RequestQueue,之后API线程从RequestQueue获取request并处理,并将response加入到对应processor的ResponseQueue(API线程用到的processor为request包含的processor,是该processor创建了此request),最后再由processor线程处理响应并返回给客户端。
所用环境信息
- Java JDK:1.8.0_92
- Scala:2.10.6
- gradle:3.1
- zookeeper: 3.4.9
- kafka: 0.10.0.1
- Intellij idea Scala 插件:2017.2.13