如果一堆线程处于阻塞状态,会不会影响性能?

问题描述 投票:0回答:1

如果程序有一堆线程处于阻塞 io 状态,Linux 或 BSD 内核是否会变慢,或者性能缺陷是否可以忽略不计?我正在编写一个可以处理约 7000 个客户端的服务器程序,我想知道如果其中 1000 个客户端闲置 2 小时,性能会受到多么严重的影响。我使用的是运行 Debian Linux 或 OpenBSD BSD 的基本消费计算机。

我正在使用 C 和 C++。

linux linux-kernel embedded-linux bsd openbsd
1个回答
0
投票

如果这些线程大部分时间都在等待事件,那么除了消耗一些内存之外,没有任何缺点。例如,每个(内核)线程都有自己的堆栈,在现代 amd64 系统上通常为 4..16 MB。除非您为 7000 个客户端中的每一个都启动一个线程,否则不会有任何问题:内核根本不会接触这些线程,而某些 I/O 或信号不会在那里发生。

如果你真的打算有 7000 个内核线程......你最好不要。请查看非阻塞 I/O,特别是,良好的起点是可移植的 poll(2) API。这就是像 nginx 这样的现代高性能软件在幕后使用的方法来同时处理大量网络客户端。

© www.soinside.com 2019 - 2024. All rights reserved.