ZKX's LAB

高并发得时候服务器压力大,是内存的问题还是cpu的问题? 多cpu服务器 进程分配

2021-04-27知识1

设置cpu affinity 我要使用一个八核cpu的服务器去运行8个相同的进程,每个进程指定一个cpu来分别完成。我可以在任务管理器里手动设置分配cpu给某个进程。。

关于多进程和多线程 分配的问题 [ 不是cpu个数,是线程数。cpu同时只能执行一个指令,多个指令就得排队一个个执行。多线程可以多个指令同时执行,但是如果程序多线程没有什么优化的话,哪怕有8个线程,也会空几个线程不用的,浪费。这个方式可以在程序中指定。

linux单进程如何实现多核cpu多线程分配? linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现。但是要注意,如果线程函数内部的有某个循环,且该循环内没有任何系统调用的话,可能会导致这个线程的CPU时间无法被切换出去。也就是占满CPU现象,此时加个系统调用,例如sleep,线程所占的CPU时间就可以切换出去了。2:利用pthread库自带的线程亲和性设置函数,来设置线程在某个CPU核心上跑,这个需要在程序内部实现。同时注意不要和进程亲和性设置搞混淆了int pthread_setaffinity_np(pthread_t thread,size_t cpusetsize,const cpu_set_t*cpuset);int pthread_getaffinity_np(pthread_t thread,size_t cpusetsize,cpu_set_t*cpuset);从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、e79fa5e98193e4b893e5b19e31333337396337设置。

#多cpu服务器 进程分配#dcom服务器进程占cpu

qrcode
访问手机版