gpt4 book ai didi

.net - 许多线程只需执行一项操作即可在.net中构建耗时的对象

转载 作者:行者123 更新时间:2023-12-03 13:21:25 25 4
gpt4 key购买 nike

我有一个GetProducts方法,该方法返回20个产品。每个产品的创建时间都非常长(许多地方有很多资源)。

您是否建议拆分20个不同的线程(使用线程池队列)来处理每个产品的创建?

这会使服务器承受很大的负担吗?我的应用程序有承受高负载的风险。

之所以提出这一要求,是因为我实际上已经实现了这样的事情,并且在进行负载测试时,我的服务器陷于瘫痪,需要完全重新启动才能恢复正常运行。

有没有我缺少的方法?我做错了吗?我应该坚持同步处理吗?

注意:在进行负载测试时,服务器内存已被大量使用,有时会引发错误(服务器内存不足)。垃圾收集器是否工作得不够快?

另外,我的产品是从商务服务器(本身会缓存)加载的,但是我有很多资源需要附加到产品上(图像,文档,评论等)。

另外,我的体系结构是两层设置,其Web前端完全位于wcf服务(执行线程)上。 wcf层正在变得残缺不全。这些服务器是在分配了ram的8核服务器上虚拟的。

个人注意我有一种滥用多头的感觉。对“GetProducts”的调用应该是异步的,但是对“GetProducts”的调用不必进行20次异步操作。

最佳答案

即使您受CPU限制,除非您有20个内核可以将它们专用于此-否则,最多分配20个线程可能是过大的。而不是已经高度线程化的asp.net。

添加线程也会使同步变得困难-我确实想知道您当前的实现是否已陷入僵局。

如果数据来自不同的地方,那么异步是有道理的,但可能会被夸大。在某些方面,使用池线程可能很诱人,因为这并不会完全窃取整个系统的处理能力(池具有某种内在的健全性,通常将使用<20个线程来服务20个项目)。

关于.net - 许多线程只需执行一项操作即可在.net中构建耗时的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com