同步方式
除了使用wait()/notify()来实现同步之外,在java.util.concurrent包中还有几种进行同步的方式,如信号量、屏障、闭锁和交换器。
有几个与性能关系密切的属性
1 | <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" |
Executor代表的是tomcat中的线程池,可以由其他组件共享使用,是Service元素的内嵌元素
注意配置后要在Connector节点中使用对应的executor才会生效
1
2
3
4 ><Connector executor="tomcatThreadPool" port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" relaxedPathChars="|{}[],%"
relaxedQueryChars="|{}[],%"/>
kafkaServer启动时,初始化启动了一个SocketServer服务,用于接受客户端的连接、处理客户端请求、发送响应等,同时创建一个KafkaRequestHandlerPool用于管理KafkaRequestHandler。
SocketServer是基于Java NIO实现的网络通信组件,线程模型为:一个Acceptor线程负责接收客户端所有的连接;{num.network.threads}个Processor线程,每个Processor有多个Selector,负责从每个连接中读取请求;{num.io.threads}个KafkaRequestHandler线程处理请求,并将产生的请求返回给Processor线程。
KafkaRequestHandler是由KafkaRequestHandlerPool管理,在Processor和KafkaRequestHandler之间通过RequestChannel来缓冲请求,每个KafkaRequestHandler从RequestChannel.requestQueue接受RequestChannel.Request,并把Request交由KafkaApis的handle()方法处理,经处理后把对应的Response存进RequestChannel.responseQueues队列