线程数究竟设多少合理
一、需求缘起 Web-Server 通常有个配置, 最大工作线程数 ,后端服务一般也有个配置,工作线程池的 线程数量 ,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为 CPU 核数的 2 倍,有些业务设置为 CPU 核数的 8 倍,有些业务设置为 CPU 核数的 32 倍。 “工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能 ,是本文要讨论的问题。 二、一些共性认知 在进行进一步深入讨论之前,先以提问的方式就一些共性认知达成一致。 提问:工作线程数是不是设置的越大越好? 回答: 肯定不是的 1 )一来服务器 CPU 核数有限,同时并发的线程数是有限的, 1 核 CPU 设置 10000 个工作线程没有意义 2 )线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低 提问:调用 sleep() 函数的时候,线程是否一直占用 CPU ? 回答: 不占用 ,等待时会把 CPU 让出来,给其他需要 CPU 资源的线程使用 不止调用 sleep() 函数,在进行一些阻塞调用,例如网络编程中的 阻塞 accept() 【等待客户端连接】和 阻塞 recv() 【等待下游回包】也不占用CPU资源 提问:如果 CPU 是单核,设置多线程有意义么,能提高并发性能么? 回答: 即使是单核,使用多线程也是有意义的 1 )多线程编码可以让我们的服务 / 代码更加清晰