高并发编程thirft源码解析

我用的thrift模式:

网络编程模式

arg.selectorThreads(Integer.parseInt(mProp.get("LogServerSelectorThread").toString()));
这步骤是启动了多个线程,每个线程里面有个bocking queue队列,队列元素是socketchannel,线程启动后就不断消费这个队列
并不是select使用了多线程,而是便利selectkey时,没当有一个连接socketchannel进来就加入队列,

arg.workerThreads(Integer.parseInt(mProp.get("LogServerWorkThread").toString()));  //worker线程数
这一步其实是处理selector的连接数,内部使用了ExcuteService这个线程池,
每天有个连接进来,就是用从这个线程池里面任意取一个线程来执行下面这个方法,目的是分别client到一个指定SelectorThread线程里面
invoker.submit(new Runnable() { public void run() { doAddAccept(targetThread, client); } });

问题1: 为什么这里使用了两个多线程,为什么不用一个就够了呢?

我的分析是:
1、如果用一个线程池,那么不断有连接进来,就会不断生成一个线程处理,
每个线程都要处理完这些数据才会释放,那么并发高度时候,就会有大量的处理线程积压,
这个线程池就会不断膨胀,最终崩溃
2、如果每个线程内部采用一个队列,那就要分别启动这些线程,并加入socketchannel到这个队列里面

thirft调度策略有:FAIR_ACCEPT和FAST_ACCEPT,默认是后者,
就是说FAST_ACCEPT模式其实就是答案里说的,只是用了一个线程池模式,没有用ExcuteServcie

问题2: SelectorThread内部为什么用blocking queue,而不用concurrent queue呢?

因为这个queue不需要共享,blocking queue效率更快

原文地址:https://www.cnblogs.com/geektcp/p/10015557.html

时间: 2024-10-09 19:24:05

高并发编程thirft源码解析的相关文章

java高并发技术netty源码解析视频教程

一 课程概要二 并发编程框架核心三 并发编程框架高级特性四 并发编程深入学习与面试精讲五 并发编程框架底层源码深度分析六 Netty整合并发编程框架Disruptor实战百万长链接服务构建七 分布式统一ID生成服务架构设计八 回顾总结源码.zip 原文地址:https://www.cnblogs.com/yellowvase/p/10713834.html

Java并发编程 ReentrantLock 源码分析

ReentrantLock 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. 这个类主要基于AQS(AbstractOwnableSynchronizer)封装的 公平与非公平锁. 所谓公平锁就是指 在多个线程的争用下,这些锁倾向于将访问权授予等待时间最长的线程,换句话说也就是先被锁定的线程首先获得锁. 非公平锁正好相反,解锁时没有固定顺序. 让我们边分析源代码边学习如何使用该类 先来看一下构造参数,默认

java并发-AQS.ObjectCondition源码解析

1 什么是条件队列 它使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列的元素是一个个正在等待状态的线程.对象的内置锁(synchronized语义对应的同步机制),关联着一个内置的条件队列.Object的wait/notify/notifyAll等方法构成了内部条件队列的API(即将内部锁与内部条件队列关联的机制). 内部条件队列是需要内置锁保护的,即:需要调用对象X中的条件队列,必须持有对象X上的锁.这是因为状态处于并发环境下,"等待依赖状态的某个条件"与"维护

Java并发编程-AbstractQueuedSynchronizer源码分析

简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态.然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同步器提供的以下三个方法对状态进行操作: java.util.concurrent.locks.Abstra

68:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析

今天给大家带来的是王家林老师的scala编程讲座的第68讲:Scala并发编程原生线程Actor.Cass Class下的消息传递和偏函数实战解析 昨天讲了Actor的匿名Actor及消息传递,那么我们今天来看一下原生线程Actor及CassClass下的消息传递,让我们从代码出发: case class Person(name:String,age:Int)//定义cass Class class HelloActor extends Actor{//预定义一个Actor  def act()

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

Android网络编程(七)源码解析OkHttp前篇[请求网络]

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 前言 学会了OkHttp3的用法后,我们当然有必要来了解下OkHttp3的源码,当然现在网上的文章很多,我仍旧希望我这一系列文章篇是最简洁易懂

Linux内核编程:Linux2.6内核源码解析_进程遍历 &nbsp; &nbsp; &nbsp; &nbsp;

/*     *File    : test.c   *Author  : DavidLin        *Date    : 2014-12-07pm        *Email   : [email protected] or [email protected]        *world   : the city of SZ, in China        *Ver     : 000.000.001        *history :     editor      time    

Android网络编程(十一)源码解析Retrofit

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 Android网络编程(七)源码解析OkHttp前篇[请求网络] Android网络编程(八)源码解析OkHttp后篇[复用连接池] Andr