- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个应用程序(永远运行的守护程序应用程序)必须管理物理设备(例如 RS485 设备)和系统内的应用程序之间的通信(请求和响应)——类似于许多应用程序要与之交谈的“通信层”硬件设备。
Applications_Send_Request -> Communication_Layer_Forwards_To_Devices -> Communication_Layer_Gets_Response -> Application_receives_response。
我将请求转发到设备并获得响应的部分可以是异步作业。
我计划创建一个线程,该线程将在应用程序接受其他请求的后台执行此操作。
现在,这个线程将是短暂的 - 大约只有几毫秒到几秒。
我可能每秒收到数百个请求 - 因此应用程序正在创建大量短暂的线程并删除它们 - 永远持续不断地进行。
关注点:1 - 创建数千个线程(尽管它们的生命周期很短)。2 - 应用程序的运行时间非常长 - 永远运行。
当像这样大量使用线程时,上述设计是否安全可靠。
最佳答案
使用 Windows thread pool为此,通过 System.Threading.ThreadPool
公开。
在 Windows 上手动启动和关闭线程的成本非常高。即使在空闲时,它们也会占用大量的用户和内核内存,并且维护起来非常重量级。
Windows 专门提供线程池API 来解决在不同线程上运行大量独立的、短暂的并行任务的问题,这样程序就不需要通过创建自己的线程来使系统重载。可以在此处找到关于选择线程池的非常好的讨论:https://stackoverflow.com/a/230023
如果您只是让操作系统为您管理线程,您的程序将会更小、更快、更简单并且更易于维护。
关于c# - 许多短命线程方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380914/
我是一名优秀的程序员,十分优秀!