从 应对高并发的角度出发,NIO 有必要和多线程一起用吗?
1
guyeu 2021-02-24 14:37:09 +08:00
NIO 是为了减少线程阻塞,多线程是为了利用多核性能
|
2
Jooooooooo 2021-02-24 14:45:58 +08:00
虽然 selector 性能不错, 但并发高了默认的 4 个也不够用.
|
3
ljzxloaf 2021-02-24 15:16:05 +08:00
别让 cpu 空闲就行,一般线程数=逻辑核心数(超线程数);但是现在一般不可能让某个服务单独使用一台物理服务器,所以要根据不同的虚拟技术去获取正确的核心数。比如 jdk 在 1.8u131 之前,在 docker 环境下从 Runtime 获取核心数获取到的都是物理机的核心数,如果根据这个值去设置,会增加不必要的线程切换,在并发非常高的情况下会严重影响性能
|
4
MXA 2021-02-26 16:06:19 +08:00
所以有了 AIO,不过 AIO 需要更底层的支持,目前好像没有得到广泛支持
|
5
liian2019 2021-03-03 18:31:02 +08:00
不然怎么从单 reactor 单线程演变成多 reactor 多线程呢
|