首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让我的应用程序在监控数百个实时设备时运行良好?

如何让我的应用程序在监控数百个实时设备时运行良好?
EN

Stack Overflow用户
提问于 2011-05-04 03:27:06
回答 4查看 347关注 0票数 10

我需要在Delphi中开发一个实时(即,每秒至少请求和接收一次信息)监控应用程序,它监控多个远程设备(可以是数百个)。通信是通过TCP/IP进行的。

我正在寻找建议,以开发这个应用程序,避免100%的CPU消耗,并最大限度地减少RAM的使用量。换句话说,我希望我的应用程序保持响应,而不是阻塞系统或消耗所有资源。

我主要关心的是使用线程来监视每个远程设备。我的应用程序可以创建的线程数有限制吗?是否可以使用低优先级或中优先级启动线程,以最小化CPU消耗?

关于最佳内存使用的建议也是受欢迎的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-04 03:38:07

您的直觉是正确的,您希望处理主线程之外的线程中的登录。创建一个简单的tcp/ip服务器,它为传入的连接创建一个新线程,并在那里处理日志记录。显然,您可能希望跟踪每个线程,以便能够在服务器应用程序关闭时终止它,如果您想要重用它们而不是不断地创建和销毁它们,还可能实现一个线程池/队列。但您所描述的实际上是一个概念上相当简单的服务器应用程序。你可以创建的线程数量没有硬性限制。但是,除非连接是恒定的并保持开放,否则您可能会惊讶地发现,实际上同时创建的连接是如此之少。

票数 3
EN

Stack Overflow用户

发布于 2011-05-04 07:21:17

祝你自己做这件事好运。我花了几年的时间来开发一个通用的平台来做这件事。如果你愿意,你可以在here上看看。至少,您需要使用一些已经非常可靠地工作的通信组件,例如RemObjects。

票数 1
EN

Stack Overflow用户

发布于 2011-05-04 16:51:35

我不会为每个设备使用线程,我会调查线程是否可以服务于设备池,或者线程池是否可以用于将传入数据分派到第一个可用的线程。

您可以检查此article about process and thread limits in Windows。线程可以具有较低的优先级,但要注意,它们可能会被具有较高优先级的线程抢占,并且无法及时读取/写入数据。此外,太多的线程可能只是“浪费”时间,如果它们无事可做,但调度器被迫给它们一段时间(线程应该表现得很好,以避免只是使用它什么也不做)。有多少线程可以并发运行而不会出现问题,这严格取决于可用的硬件。

这在很大程度上取决于数据是如何传递的(是拉还是推?是否所有数据都具有相同的优先级?)以及读取数据后的处理工作,以及系统对新数据的反应速度。例如,一种解决方案可能涉及读取数据并将其排队以供处理,但如果响应时间应短于队列所允许的时间,则该解决方案将无法工作。

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

https://stackoverflow.com/questions/5874584

复制
相关文章

相似问题

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