首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程池的类比

线程池的类比
EN

Software Engineering用户
提问于 2012-08-09 03:01:12
回答 3查看 641关注 0票数 3

我正在处理一个应用程序,它为每个请求生成一个新线程。有时,机器上一次活动的线程数高达数百个。人们怀疑这引起了各种各样的问题。我想尝试使用线程池,以查看这是否提高了工作吞吐量。但首先,我必须说服那些能给我时间的力量。

作为我论点的一部分,我认为将蛮力“启动x线程”方法与线程池技术进行比较的一个很好的类比会有所帮助。这有课本的类比吗?

EN

回答 3

Software Engineering用户

发布于 2012-08-09 05:42:14

不完全是教科书的类比:

应用程序线程池就像对社区的回收一样。

每次我们口渴的时候,我们都可以去买一瓶新的水。这很容易,对我们来说相对便宜,对制造商来说也相当有利可图。不幸的是,它没有扩展:

以类似的方式,每次从头开始创建一个新线程都是浪费的(可能很慢),而且没有安全保障。太多的线程会耗尽执行环境的资源,就像太多的塑料瓶会淹没和毒害自然栖息地一样。

票数 8
EN

Software Engineering用户

发布于 2012-08-09 05:58:22

线程池中的线程通常被称为“工作线程”,这是有充分理由的。他们就像一家公司的一些员工,准备从事一些“任务”,每个人都需要一些工作空间去工作,每个人都有要处理的任务队列。

启动一个线程只是为了执行一个任务,就像找到资源专门为这个任务雇佣一个人,让她去做,然后解雇她。

显然,如果任务很长,很少见,而且非常具体,那么这可能没有什么问题,但这种情况发生得越频繁,成本就越高。

在这种情况下,仅仅将任务放在工作人员的任务队列的顶部就足够了。如果他花了太多的时间开始工作,另一个没有更多任务可做的工人可以从他的队列中偷取任务。如果在一段时间内没有可用的员工,那么这意味着您要么没有足够的员工,要么无法使用可用的资源快速完成。特别是,如果您已经有了可以使用的最大数量的工作人员,而不需要每个人都站在其他人的脚上,比如线程池,那么除了拥有更大的位置(更好的硬件)或减少工作负荷之外,您什么也做不了。

这种类比也可以很容易地解释中断和通信的成本。

票数 4
EN

Software Engineering用户

发布于 2012-08-09 06:09:15

想象一下吃了一整包奥利奥饼干。如果你不是每次想要一个美味的奶油中心的时候都要吃干巧克力晶片的话,这种体验会更令人愉快,对吧?使用线程池就像将所有cookies的中心堆在一对晶片之间一样!

如果您分析您的代码并显示您的机器用于启动和停止线程(吃晶圆)的时间与花在奶油中心(实际处理请求)上的时间相比,这个类比会更有说服力。

如果需要实现,请查看利布调度

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/160107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档