multithreading - 潜在线程密集型应用程序中多个套接字的异步与同步套接字

标签 multithreading sockets thread-safety threadpool compact-framework2.0

我正在为我的公司在 Windows CE 设备的 Compact Framework 2.0 上编写一个相对较大的应用程序,并且使用单个 CPU 内核。

无需深入了解细节,在最坏的情况下,非套接字相关的工作可能会同时运行 10 个左右的线程。

考虑到这一点,我第一次在小型测试应用程序中使用套接字。这个较大的应用程序可能会与同一 IP 地址上的 7 个不同端口进行通信(例如,明显错误的 IP,1.2.3.4:4000、1.2.3.4:4001、1.2.3.4:4002 等),因此使用 7 个不同的端口套接字对象。

紧凑框架 2、1 个 CPU 核心、在最坏情况下大约 10 个非套接字线程,以及 7 个用于编程发送功能和连续接收(尽快处理/响应)的套接字他们。

我一直在考虑异步套接字编程是否只会给我带来麻烦,对于 Compact Framework 2.0,默认的最大线程数为 25(每个核心),并且本质上我必须变得多么“聪明”。

您有什么建议?异步或同步套接字编程,以及您建议的任何特定的附加细节,或者如果我什么也不担心。

最佳答案

由于您的设备内存肯定有限,并且 .NET 线程堆栈默认消耗 1MB 内存(已提交,而不仅仅是保留),我认为您应该使用异步 IO,因为它不会阻塞线程。只有您的回调/延续才会发布到线程池上。线程池线程很少,因此堆栈导致的内存使用量较低。

请记住,异步 IO 主要是为了不阻塞线程,从而节省内存和操作系统句柄。这与降低 CPU 成本无关(根据我对网络 IO 的基准测试,情况恰恰相反)。

关于multithreading - 潜在线程密集型应用程序中多个套接字的异步与同步套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658315/

相关文章:

C posix套接字,无法将数据从客户端发送到服务器

c# - 串行任务执行器;这个线程安全吗?

c - 在c中使用多个线程读取多个文件

c++ - 定期检查条件而不阻塞

java - 使用数据库读写杀死多线程操作

python - 生产者多消费者问题,消费者在生产者完成之前完成工作

来自多个进程的 Python 日志记录

Python套接字: how to enable promiscuous mode in linux

python - 扩展 Python 列表(例如 l += [1])是否保证是线程安全的?

python - 当脚本仍在运行时终止守护线程