首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试题 -- 如何设计一个线程池

前一段时间写一门算法课,总算是上线了,以及面试,所以没什么时间写,接下来时间,应该会讲讲面试准备,刷题一些东西,面了很多,通过面试有平安,涂鸦智能,阿里,腾讯微保,虾皮,华为荣耀,微众,当然也有其他不少挂...以前,我总觉得买一件东西,做一件事,或者从某一个时间节点开始,我生命就会发生转折,一切就会无比顺利,立马变厉害。但是,事实上并不是如此。我不可能马上变厉害,也不可能一口吃成一个胖子。...提高响应速度:利用已经存在线程进行处理,少去了创建线程时间 管理线程可控:线程是稀缺资源,不能无限创建,线程池可以做到统一分配监控 拓展其他功能:比如定时线程池,可以定时执行任务 需要考虑点 那线程池设计需要考虑点...:所有线程停止 TERMINATED:线程池最后状态 各种状态之间是不一样,他们状态之间变化如下: 而维护状态的话,可以用一个变量单独存储,并且需要保证修改时原子性,底层操作系统中,对int...取任务执行任务,对于线程池里面的线程而言,就是一个周而复始工作,除非它会消亡。 线程有哪些状态?

73330

面试题 -- 如何设计一个线程池

以前,我总觉得买一件东西,做一件事,或者从某一个时间节点开始,我生命就会发生转折,一切就会无比顺利,立马变厉害。但是,事实上并不是如此。我不可能马上变厉害,也不可能一口吃成一个胖子。...提高响应速度:利用已经存在线程进行处理,少去了创建线程时间 管理线程可控:线程是稀缺资源,不能无限创建,线程池可以做到统一分配监控 拓展其他功能:比如定时线程池,可以定时执行任务 需要考虑点 那线程池设计需要考虑点...:所有线程停止 TERMINATED:线程池最后状态 各种状态之间是不一样,他们状态之间变化如下: [20210619211431.png] 而维护状态的话,可以用一个变量单独存储,并且需要保证修改时原子性...取任务执行任务,对于线程池里面的线程而言,就是一个周而复始工作,除非它会消亡。 线程有哪些状态?...TIMED_WAITING :超时等待,指定时间后自动唤醒,返回,不会一直等待 TERMINATED :线程执行完毕,已经退出。

84000
您找到你想要的搜索结果了吗?
是的
没有找到

Django+Celery学习笔记1——任务队列介绍

你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它事情   3、Celery 执行任务时需要通过一个消息中间件来接收发送任务消息,以及存储任务结果...broker: 存放任务(依赖RabbitMQ或Redis,进行存储) worker:执行任务   Celery特性描述   1、方便查看定时任务执行情况, 如 是否成功, 当前状态, 执行任务花费时间等...})   支持参数:   1、countdown : 等待一段时间再执行 add.apply_async((2,3), countdown=5)   2、eta : 定义任务开始时间. add.apply_async...priority.high', routing_key='web.add', priority=0, exchange='web_exchange')   Celery 序列化   客户端消费者之间传输数据需要...Pickle好处是简单易用,但是使用过程中会有一些坑。当代码发生变动时,已经序列化对象,反序列化后依然是变更前代码。

98610

动态 |《机器学习》作者Tom Mitchell:人工智能如何向人类大脑学习?

另外我们脑科学方面的发展也非常迅猛,在过去十几年时间里,有很多先进技术设备,使得我们可以采用无创或者微创方法进入到人大脑,进行毫米级地观察,而且毫秒内就可以对几千张影像进行分析,观察人脑活性...不同情况下,大脑各个区会域进行相应振荡,因此可以不同时间点进行观测,当人们社交时候,大脑当中管社交部分会得到同步激活,不过有自闭症的人和正常人状况也不一样。...人工智能与脑科学结合 所以就出现了这样一个问题:为什么不将两者结合起来呢?研究方面,无论时脑科学还是人工智能都在进行交叉研究。...对应芹菜可以看到芹菜相关联字数,口味是芹菜相应一个关联度;对飞机来说,则会出现很多动词,可以看到相关一些词就出现了。...,也会有很高识别率,也就是说,神经活动对词义表达,是用了我们矢量表达法来进行词义解释。

89850

有了Future为什么还要CompletableFuture?

, 判断任务执行是否完毕等 场景描述 主线程让一个子线程去执行任务,子线程可能比较耗时,如果没有实现异步任务执行,主线程只能一直等待 Future 接口支持了异步任务执行之后,子线程开始执行任务同时,...,提供了转化组合 CompletionFuture 方法 它可能代表了一个明确完成 Future,也可能代表一个完成阶段 CompletionStage,它支持计算完成之后触发一些函数或执行某些动作...实现了 Future CompletionStage 接口 核心四个静态方法,创建一个异步任务 为什么要不用 new CompletionFuture()方式创建异步任务 API 中说明通过...开始引入了 CompletableFuture,它是 Future 功能增强版,减少阻塞轮询, 可以传入回调对象,当异步任务完成或者发生异常时,自动回调对象回调方法 使用 CompletableFuture...* * @return a result */ T get(); } Summer 先说说 join get 对比 get 程序编译时会检查异常,join

9110

【40期】说一下线程池内部工作原理

,也会有corePoolSize个线程候着等任务。...keepAliveTime:线程存活时间。当线程池里线程数大于corePoolSize时,如果等了keepAliveTime时长还没有任务可执行,则线程退出。...handler:拒绝策略,当线程池里线程被耗尽,且队列也满了时候会调用。 以上就是创建线程池时用到参数,面试中经常会有面试官问到这个问题。...如果放入workQueue失败,则创建线程执行任务,如果这时创建线程失败(当前线程数不小于maximumPoolSize时),就会调用reject(内部调用handler)拒绝接受任务。...如果当前线程数大于corePoolSize,则会调用workQueuepoll方法获取任务,超时时间是keepAliveTime。

32020

并行分布式框架 Celery 之架构 (1)

当用户触发一个操作需要较长时间才能执行完成时,可以把它作为任务交给Celery去异步执行,执行完再返回给用户。这段时间用户不需要等待,提高了网站整体吞吐量响应时间。 定时任务。...1.3 特性 Celery提供了如下特性: 方便地查看定时任务执行情况,比如执行是否成功、当前状态、执行任务花费时间等。...0x02 Celery架构 Celery 基本逻辑为:分布式异步消息任务队列。 Celery 中,采用是分布式管理方式,每个节点之间都是通过广播/单播进行通信,从而达到协同效果。...Worker:需要有一个组件来执行任务,这就是 Worker: Worker 需要从 broker 接受任务。...接受任务之后,Worker 需要了解任务,知道怎么执行任务执行任务。所以有一个问题:Worker 怎么知道 client 端任务? 通常会在多台服务器运行多个 worker 来提高执行效率。

66220

基础篇:高并发一瞥,线程线程池总结

,必须是继承Thread或者是实现Runnable接口 Thread.sleep与Object.wait区别 Thread.sleep需要指定休眠时间时间一到继续运行;锁机制无关,不能加锁也不用释放锁...无任务执行时,会被销毁 3 keepAliveTime:非核心线程闲暇间存活时间 4 TimeUnit:keepAliveTime配合使用,表示keepAliveTime参数时间单位 5 workQueue...;否,则创建核心线程来执行任务;是,则执行plan B plan B:当任务数大于核心数时,任务被加入阻塞队列,如果超过阻塞队列容量上限,执行C plan C: 阻塞队列不能接受任务时,且设置maximumPoolSize...SingleThreadExecutor比new个线程好处是;「线程运行时抛出异常时候会有线程加入线程池完成接下来任务;阻塞队列可以保证任务按FIFO执行」 //Executors.java...shuwdown:线程池拒接收新任务,同时等待线程池里任务执行完毕后关闭线程池,代码shutdownNow类似就不贴了 10 线程池为什么使用是阻塞队列 先考虑下为啥线程池线程不会被释放,它是怎么管理线程生命周期

56910

彻底理解Java并发:Java线程池

4、线程池状态 RUNNING:这个状态表明线程池处于正常状态,可以处理任务,可以接受任务 SHUTDOWN:这个状态表明线程池处于正常关闭状态,不再接受任务,但是可以处理线程池中剩余任务...这个线程池只有一个线程工作,也就是相当于单线程串行执行所有任务。如果这个唯一线程因为异常结束,那么会有一个新线程来替代它。此线程池保证所有任务执行顺序按照任务提交顺序执行。... Future、FutureTask 这几个类 Executor 框架是 Java5 之后引进 Java 5 之后,通过 Executor 来启动线程比使用 Thread start 方法更好...用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供Runnable对象,将任务运行逻辑提交到执行器(Executor)中,由Executor框架完成线程调配任务执行部分。...AbstractExecutorService则是上层抽象类,将执行任务流程串联了起来,保证下层实现只需关注一个执行任务方法即可。

36020

Android Jetpack - 使用 WorkManager 管理后台任务

这也是为什么前面说 WorkManager.getInstance().enqueue(request) 是将任务加入任务队列,并不代表马上执行任务,因为任务可能需要等到满足环境条件情况才会执行。...强大生命力 还是一样代码,我们来做点不一样操作: 断网后运行 将进程杀掉 联网 再次运行 不出意外的话,这时候你会看到有两个时间打印,而且两个时间还不一样,这是为什么呢?...除了需要传入间隔时间,使用起来跟 OneTimeWorkRequest 是没有区别的。...你可能会想更频繁去执行一个任务,比如几秒钟执行一遍,但很遗憾,最小时间间隔就是 15 分钟,看一下源码就知道了。...要是上面有细看的话,你应该已经发现这几点了: 定时任务有最小间隔时间限制,是 15 分钟 只有程序运行时,任务才会得到执行 无法拉起 Activity 总之,用 WorkManager 保活是不可能了

1.7K70

线程池理念分析及其手写

,就会有大量时间用在创建和销毁上,而不是执行任务上,而线程池关注就是调整T1T3时间,线程池可以免去T1T3时间     3:提高线程可管理性   不如先来实现一个自己线程池     思想...:       1:为了优化T1T3时间,使用前,线程必须在池中已经创建好了,并且可以保持住,既然要保存住,那么就需要一个容器       2:里面的线程如果是只能跑已经在内部写好代码,那么就没有意义...long keepAliveTime:线程空闲下来存活时间,这个数值,只有在线程池内线程数量 > corePoolSize时候才会有作用,它决定着 > corePoolSize数量线程空闲下来存活时间...        scheduleWithFixedDelay:提交固定延时间隔执行任务       两者区别: ?         ...        第一个任务第0秒开始,第80S结束;         第二个任务第80s开始第100秒结束;         第三个任务第120s秒开始,170秒结束         第四个任务从

32620

扫盲篇-什么是分布式任务调度

某网站为了实现天气实时展示,每隔5分钟就去天气服务器获取最新实时天气信息。 以上场景就是任务调度所需要解决问题。 任务调度是指系统为了自动完成特定任务,约定特定时刻去执行任务过程。...有了任务调度即可解放更多的人力由系统自动去执行任务。 任务调度如何实现? 多线程方式实现: 学过多线程同学,可能会想到,我们可以开启一个线程,每sleep一段时间,就去检查是否已到预期执行时间。...} } }; Thread thread = new Thread(runnable); thread.start(); } 上面的代码实现了按一定间隔时间执行任务调度功能...Timer ScheduledExecutor 都仅能提供基于开始时间与重复间隔任务调度,不能胜任更加复杂调度需求。...Quartz支持简单时间间隔调度、还支持按日历调度方式,通过设置CronTrigger表达式(包括:秒、分、时、日、月、周、年)进行任务调度。

4.6K30

爬虫架构|Celery+RabbitMQ快速入门(三)

之前两章节中,简单介绍了Celery+RabbitMQ,以及它们之间协作过程(见文章爬虫架构|Celery+RabbitMQ快速入门(一)爬虫架构|Celery+RabbitMQ快速入门(二))。...它基本工作就是管理分配任务到不同服务器,并且取得结果”,可以得知,我们之所以使用它是看中了它分布式,我们使用场景也是用它做分布式爬虫架构(为什么不选用scrapy-redis?...以及它们之间区别,下次再讲)。 对于一个分布式爬虫来说,有两个最基本问题需要解决。 分配爬取任务:为每个爬虫分配不重复爬取任务。 汇总爬取结果:将所有爬虫爬取到数据汇总到一处。...至于多个worker为什么不会出现消费同一个任务,这里是celery本身负载均衡机制保障了任务去重。...: 实际执行任务程序 broker: 接受任务消息,存入队列再按顺序分发给worker执行 backend: 存储结果服务器 还剩下celery beatbackend没有讲解,后面会有一篇爬虫架构

2K70

【原创】Java并发编程系列35 | ScheduledThreadPoolExecutor定时器

可以返回结果; 第三种scheduleAtFixedRate(); 固定周期执行任务,每次执行开始时间之间间隔是固定,最开始就能够确定之后每次执行时间; 第四种scheduleWithFixedDelay...(); 固定延时周期执行任务,上一次执行结束到下一次执行开始间隔时间是固定,由于每次执行任务花费时间不一定相同,所以只有在上次执行结束之后才能确定下次执行开始时间。...4. scheduleAtFixedRate() VS scheduleWithFixedDelay() scheduleAtFixedRate(); 固定周期执行任务,每次执行开始时间之间间隔是固定...; 第三种scheduleAtFixedRate(); 固定周期执行任务,每次执行开始时间之间间隔是固定,最开始就能够确定之后每次执行时间; 第四种scheduleWithFixedDelay(...); 固定延时周期执行任务,上一次执行结束到下一次执行开始间隔时间是固定,由于每次执行任务花费时间不一定相同,所以只有在上次执行结束之后才能确定下次执行开始时间

77310

爬虫架构|Celery+RabbitMQ快速入门(四)整合版本

worker: 实际执行任务程序 broker: 接受任务消息,存入队列再按顺序分发给worker执行 backend: 存储结果服务器了 接下来整合前面三篇文章内容,做一个整合版本。...一、Celery简介 Celery是一个专注于实时处理任务调度分布式任务队列。所谓任务就是消息,消息中有效载荷中包含要执行任务需要全部数据。 使用Celery常见场景如下: Web应用。...当用户触发一个操作需要较长时间才能执行完成时,可以把它作为任务交给Celery去异步执行,执行完再返回给用户。这段时间用户不需要等待,提高了网站整体吞吐量响应时间。 定时任务。...Celery还提供了如下特性: 方便地查看定时任务执行情况,比如执行是否成功、当前状态、执行任务花费时间等。 可以使用功能齐备管理后台或者命令行添加、更新、删除任务。...四、Celery序列化 客户端消费者之间传输数据需要序列化反序列化,Celery支持如下序列化方案: pickle pickle是Python标准库中一个模块,支持Python内置数据结构

2.1K70

【小家java】Java定时任务ScheduledThreadPoolExecutor详解以及与Timer、TimerTask区别(执行指定次数停止任务)

TimerTimerTask 本文先介绍Java最原始解决方案:TimerTimerTask TimerTimerTask可以作为线程实现第三种方式,JDK1.3时候推出。...第三个第四个方法则属于第二类,即在第二个参数(initialDelay)指定时间之后开始周期性执行任务,执行周期间隔为第三个参数指定时间。...但是这两个方法区别在于:第三个方法执行任务间隔是固定,无论上一个任务是否执行完成(也就是前面的任务执行慢不会影响我后面的执行)。...而第四个方法执行时间间隔是不固定,其会在周期任务上一个任务执行完成之后才开始计时,并在指定时间间隔之后才开始执行任务。...则后面的执行会等待5s才回去执行 scheduleWithFixedDelay 是以上一个任务结束时开始计时,period时间过去后,立即执行, 由上面的运行结果可以看出,第一个任务开始第二个任务开始间隔时间

3.4K20

常见重试方法交互研究

由于中间没有任何时间间隔,如果所有的客户端都发生这种行为,这会导致服务端爆炸,爆炸代表是服务器过载崩溃。然后它会在几秒钟后重新启动。...然后开始继续陷入崩溃漩涡。 延迟重试 因此,紧密循环中重试是有问题,我们已经了解了原因。人们要做下一件事是每次重试之间添加延迟。重试 10 次,sleep(1000) 中间间隔 1 次。...但这在实践中会导致糟糕用户体验。用户不喜欢等待,并且重试之间睡眠时间越长,他们就越有可能手动刷新或去做其他事情。都是不好结果。...计算指数退避时,您可以配置很多东西,但如果您想象我们开始等待 1 秒,每次重试等待两倍时间,那么 10 次重试将如下所示: 1秒 2秒 4秒 8秒 16秒 32秒 1分4秒 2分8秒 4分16秒 8...抖动 我们已经看到了指数退避威力,但我们还可以通过重试做最后一件事,使它们成为真正最佳实践。 “抖动”是将重试之间等待时间随机化到特定范围内过程。

13820

django开发傻瓜教程-3-celer

Celery 当前需求是:我用form从前端拿到了提交数据,由于需要处理一点时间(也许很多用户同时提请求呢)虽然感觉暂时想多了=.= 如果处理时间过长,那么一方面页面可能会超时,另一方面,用户等待太久也是不合适...我也考虑过用ajax直接部分刷新页面,但是感觉对于长时间并发任务,可能不是很合适(看到ajax例子都是很简单,不是很懂是不是不适合复杂计算逻辑?)。总之,为了以后发展,还是学一下水芹菜吧。...大型任务:执行时间较长任务,例如视频图片处理,添加水印转码等,需要执行任务时间长。 定时执行任务:支持任务定时执行设定时间执行。例如性能压测定时执行。...为了让celery中执行任务结果返回Django,再装一个 sudo pip install django-celery-results 使用redis做brokerbackend,安装: sudo...里(我这里是把design2.py主页design-post绑在一起,所以我写到design2.py里去) longtime_test.delay() 补一刀: design2.py里,我这么写(

58830
领券