Str*_*101 32 concurrency multithreading tcp c10k
在阅读着名的C10k文章并在网上搜索自编写之后事情如何演变之后,我想知道今天的标准服务器是否有可能使用每个连接的线程处理> 10000个并发连接(可能与一个线程池的帮助,以避免创建/终止进程).
一些可能影响问题解决方法的细节:
显然我不是这方面的专家,所以任何评论或建议都将受到高度赞赏:)
nos*_*sid 59
绝对.标准服务器可以使用每个连接一个线程的模型处理超过10K的并发连接.我已经构建了这样一个应用程序,五年前,它在标准Linux服务器上运行时每个进程的并发连接数超过50K.如今,应该可以在当前硬件上运行具有超过250K并发连接的相同应用程序.
要记住的只有几件事:
SO_REUSEPORT
.open files
默认1.024),max user processes
/proc/sys/kernel/pid_max
(默认为32K)/proc/sys/kernel/threads-max
,和/proc/sys/vm/max_map_count
(默认为65K).上面提到的应用程序最初设计为仅处理2K并发连接.但是,随着使用的增长,我们不必对代码进行重大更改,以便扩展到50K连接.
服务器的常用方法是:(a)每个连接的线程(通常使用线程池),或(b)单线程异步 IO(通常使用 epoll 或 kqueue)。我的想法是,这些方法的某些元素可以并且通常应该结合使用异步 IO(使用 epoll 或 kqueue),然后将连接请求移交给线程池进行处理。这种方法将异步 IO 的高效分派与线程池提供的并行性相结合。
我已经写了这样一个服务器(在 C++ 中),它在 Linux 上使用 epoll,在 FreeBSD 和 OSX 上使用 kqueue 以及线程池。我只需要按照它的节奏运行它以进行繁重的测试,做一些代码清理,然后把它扔到 github 上(希望很快)。
归档时间: |
|
查看次数: |
14836 次 |
最近记录: |