java搭建线程池框架,JAVA线程池管理及分布式HADOOP调度框架搭建

大家看到了线程的好处了吧!单线程需要10S,10个线程只需要1S。充分利用了系统资源实现并行计算。也许这里会产生一个误解,是不是增加的线程个数越多效率越高。线程越多处理性能越高这个是错误的,范式都要合适,过了就不好了。需要普及一下计算机硬件的一些知识。我们的cpu是个运算器,线程执行就需要这个运算器来运行。不过这个资源只有一个,大家就会争抢。一般通过以下几种算法实现争抢cpu的调度:

1、队列方式,先来先服务。不管是什么任务来了都要按照队列排队先来后到。

2、时间片轮转,这也是最古老的cpu调度算法。设定一个时间片,每个任务使用cpu的时间不能超过这个时间。如果超过了这个时间就把任务暂停保存状态,放到队列尾部继续等待执行。

3、优先级方式:给任务设定优先级,有优先级的先执行,没有优先级的就等待执行。

这三种算法都有优缺点,实际操作系统是结合多种算法,保证优先级的能够先处理,但是也不能一直处理优先级的任务。硬件方面为了提高效率也有多核cpu、多线程cpu等解决方案。目前看得出来线程增多了会带来cpu调度的负载增加,cpu需要调度大量的线程,包括创建线程、销毁线程、线程是否需要换出cpu、是否需要分配到cpu。这些都是需要消耗系统资源的,由此,我们需要一个机制来统一管理这一堆线程资源。线程池的理念提出解决了频繁创建、销毁线程的代价。线程池指预先创建好一定大小的线程等待随时服务用户的任务处理,不必等到用户需要的时候再去创建。特别是在java开发中,尽量减少垃圾回收机制的消耗就要减少对象的频繁创建和销毁。

之前我们都是自己实现的线程池,不过随之jdk1.5的推出,jdk自带了 java.util.concurrent并发开发框架,解决了我们大部分线程池框架的重复工作。可以使用Executors来建立线程池,列出以下大概的,后面再介绍。

newCachedThreadPool 建立具有缓存功能线程池

newFixedThreadPool 建立固定数量的线程

newScheduledThreadPool 建立具有时间调度的线程

有了线程池后有以下几个问题需要考虑:

1、线程怎么管理,比如新建任务线程。

2、线程如何停止、启动。

3、线程除了scheduled模式的间隔时间定时外能否实现精确时间启动。比如晚上1点启动。

4、线程如何监控,如果线程执行过程中死掉了,异常终止我们怎么知道。

考虑到这几点,我们需要把线程集中管理起来,用java.util.concurrent是做不到的。需要做以下几点:

1、将线程和业务分离,业务的配置单独做成一个表。

2、构建基于concurrent的线程调度框架,包括可以管理线程的状态、停止线程的接口、线程存活心跳机制、线程异常日志记录模块。

3、构建灵活的timer组件,添加quartz定时组件实现精准定时系统。

4、和业务配置信息结合构建线程池任务调度系统。可以通过配置管理、添加线程任务、监控、定时、管理等操作。

组件图为:

20ac0af375629a902d339ce07875a536.png

构建好线程调度框架是不是就可以应对大量计算的需求了呢?答案是否定的。因为一个机器的资源是有限的,上面也提到了cpu是时间周期的,任务一多了也会排队,就算增加cpu,一个机器能承载的cpu也是有限的。所以需要把整个线程池框架做成分布式的任务调度框架才能应对横向扩展,比如一个机器上的资源呢达到瓶颈了,马上增加一台机器部署调度框架和业务就可以增加计算能力了。好了,如何搭建?如下图:

f7e7e6584e934b17c4485c2d360f9b92.png

32/3<123>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5项目常见问题汇总及解决方案

H5项目常见问题及注意事项 补充&#xff1a; https://github.com/aligay/fastclick/blob/master/lib/fastclick.js Meta基础知识&#xff1a; H5页面窗口自动调整到设备宽度&#xff0c;并禁止用户缩放页面//一、HTML页面结构 <meta name"viewport" content"…

IBM将收购Instana公司,持续推进其混合云和人工智能战略

来源&#xff1a;IBM中国收购 Instana 后&#xff0c;IBM 将帮助企业在多团队和多云&#xff08;平均 2到 15个&#xff09;环境下更好地管理他们的应用性能。[1]这也是 IBM 持续完善其由人工智能所驱动的自动化能力的又一例证&#xff0c;IBM 的其他相关举措还包括&#xff1a…

python调用大漠找图_[教程贴]按键精灵调用大漠插件后台找图示例

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//------大漠注册-------------------------------------------------------------DMPath "c:\test_game\"注册大漠的文件夹DMVer "3.1233"当前使用的大漠版本号////Call 大漠注册标准版(DMPath, DMVer)//--…

1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册

基本查询查询单个数据使用find方法&#xff1a;// table方法必须指定完整的数据表名Db::table(think_user)->where(id,1)->find();最终生成的SQL语句可能是&#xff1a;SELECT * FROM think_user WHERE id 1 LIMIT 1find 方法查询结果不存在&#xff0c;返回 null&#…

[原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明

由于所创建的应用项目或类库项目较多&#xff0c;于是将这些类库放到一个文件夹下。在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系。如下图所示&#xff1a; 但打开“我的电脑”&#xff0c;看到的只有类库&#xff0c;并未看到维护层次关系的文件夹。如下图所…

java进阶(二)-java小干货

java一些精干知识点分享 2. java小干货2.1循环遍历2.2可变参数2.3 list和数组转化2.3.1 数组转list2.3.2 list转数组 2.4 值传递和地址传递2.4.1值传递2.4.2 地址传递2.4.3易错点总结 2.5 数组数组帮助类Arrays 2.5 基本数据类型和包装类2.5集合2.6文件流2.7java代码块、内部类…

机器直觉

来源&#xff1a;专知当前以深度学习代表的人工智能技术所能解决的问题往往需要具有大量可以借鉴学习的训练 集, 同时要求所获取的信息是完备的. 但在复杂时变的真实应用环境中, 采集到的数据往往包含大量 噪声与不确定性, 且仅包含环境的局部信息, 导致了基于深度学习的人工智…

vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定

办公自动化系列1现在&#xff0c;各类数据分析的书籍&#xff0c;都可以在网上找到PDF版本&#xff1b;同时&#xff0c;百度文库、各类数据统计文库、行业研究等众多论文报告&#xff0c;是通过PDF的形式去展示输出的&#xff1b;但是&#xff0c;令人都头疼的是&#xff0c;各…

reshape [] matlab,matlab之reshape函数

简单来说&#xff0c;reshape(A,m,n)就是用来把原矩阵的元素&#xff0c;按照列读取排成一行&#xff0c;然后按照指定的m*n矩阵再按列放好。比如原矩阵为A 1 2 34 5 67 8 910 11 12我们先给他按列拍成一排(变相说也就是看看reshape(A,1,12))的效…

第一阶段 07类与对象

类与对象 &#xff08;1&#xff09;面向对象&#xff08;简称&#xff1a;OOP&#xff0c;全称&#xff1a;Object Oriented Programming&#xff09; 面向对象是一种编程思想&#xff0c;相对面向过程而言 面向过程 强调的是功能的过程 面向对象 强调功能的结果&#xff0c;不…

英媒:人工智能终于接近人类智能了吗?

文章来源&#xff1a;金融时报作者&#xff1a;John Thornhill图片来源&#xff1a;网络编辑&#xff1a;江上波摘要&#xff1a;GPT-3被誉为人工智能领域的重大突破&#xff0c;有人认为它甚至显示出初步意识迹象&#xff0c;另一些人则指出GPT-3存在可笑的缺陷。它可以大量炮…

大创中期报告怎么写_课题研究中期报告怎么写?这篇范文很说的很详细

中期报告一般要求1.课题简介&#xff1a;课题由来、课题界定、研究目标、课题研究内容。2.研究情况&#xff1a;按时间顺序或内容板块有条理地说明研究工作的开展情况&#xff1b;有详有略、有主有次地陈述研究过程中做了什么、怎么做的。3.阶段成果&#xff1a;客观地阐明本课…

php数组转换编码,PHP数组转换编码类

class arrayiconv{static protected $in;static protected $out;/*** 静态方法,该方法输入数组并返回数组** param unknown_type $array 输入的数组* param unknown_type $in 输入数组的编码* param unknown_type $out 返回数组的编码* return unknown 返回的数组*/static publ…

智能合约开发solidity编程语言实例

智能合约开发用solidity编程语言部署在以太坊这个区块链平台&#xff0c;本文提供一个官方实战示例快速入门&#xff0c;用例子深入浅出智能合约开发&#xff0c;体会以太坊构建去中心化可信交易技术魅力。智能合约其实是“执行合约条款的计算机交易协议”。区块链上的所有用户…

vba九九乘法表代码_VBA代码模块化--数据透视表

本周工作中&#xff0c;用到了数据透视表的操作&#xff0c;这里汇总一下&#xff0c;学习途径来自网络&#xff0c;学习成果我也乐于分享一二~&#xff0c;代码整理为模块&#xff0c;供大家举一反三&#xff0c;可以套用。① 创建数据透视表&#xff0c;及基本设置先展示数据…

IoT 、5G与边缘计算将会擦出怎样的火花?

来源&#xff1a;半导体行业观察边缘计算是数字世界中最令人兴奋的新概念之一。利用占用空间很少的微型数据中心网络&#xff0c;边缘计算使系统能够实时收集并分析重要数据&#xff0c;而不会增加现有基础设施的负担。在物联网系统中&#xff0c;通常以端到端的方式&#xff0…

js 读取php文件内容为空,PHP 读取文件内容代码(txt,js等)

PHP 读取文件内容代码(txt,js等)发布于 2014-10-15 20:15:37 | 128 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点&…

设计法则 - 菲茨定律 (转)

在看张小龙传时&#xff0c;无意间看到了菲茨定律这个设计法则&#xff0c;研究起来十分有趣&#xff0c;在web、app都广泛应用这个法则。而在简书上有人详细介绍了它&#xff0c;已经非常优秀了&#xff0c;所以这里放个链接&#xff0c;供参考学习。 设计法则&#xff1a; Fi…

windows安装pygame(python3.6)_当我试图安装PyGameforPython3.6时,Pip不起作用[过时]

我正在使用windows 10家庭版64位版本。我正在使用Python3.6 64位版本。我试图通过运行python的干净安装来解决这个错误&#xff0c;但这并没有解决问题。我试图通过pip安装pygame&#xff0c;但产生了以下结果&#xff1a;C:\Windows\system32>pip install pygameCollecting…

“嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...

资料来源&#xff1a;人民网、中国新闻网、智东西等物联网智库 整理发布转载请注明来源和出处3&#xff01;2&#xff01;1&#xff01;点火&#xff01;随着一声声振奋人心的倒计时&#xff0c;北京时间11月24日4时30分&#xff0c;搭载嫦娥五号月球探测器的长征五号遥五运载火…