CPU界面里的线程数是什么意思

CPU界面里的线程数是什么意思,第1张

CPU线程数是指在同一时刻可同时运行程序的个数。一般来说,线程数越大,运行速度也就越快。

CPU的线程数与核心数有关,CPU内部有一串指令可以使一个核心模拟两个核心同时处理数据任务,增强多任务能力,即单核双线程。

每个进程都有很多的线程,每个线程都有很多的句柄。

一、关系:

1、线程数可以模拟出不同的CPU核心数。

CPU的核心数指的是硬件上存在着几个核心,而线程数可以模拟出多个核心数的功能。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。

2、对于一个CPU,线程数总是大于或等于核心数的。

一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。

二、区别:

1、存在形式不同。

(1)、CPU的核心数指的是硬件上真实存在的物体;

(2)、CPU的线程数只是一种逻辑上的概念,并非真实存在的物体,只是为了更好地描述CPU的运作能力。

2、线程数对于不同的CPU类型存在状态不同。

(1)、对于Intel的CPU:除了核心数的说法之外,还可以使用线程数的概念,因为它是通过Intel超线程技术来实现的。

(2)、对于AMD的CPU:只有核心数的说法,而没有线程数的概念,因为AMD的CPU没有超线程技术,一个CPU核心固定地对应一个线程。

3、出现原因不同。

(1)、核心数出现的原因:处理器主频提升上的技术遇到瓶颈,向“多核心”的方向发展可以在不用进行大规模开发的情况下将现有产品发展成为理论性能更为强大的多核心处理器系统,也因此出现了“核心数”的说法。

(2)、线程数出现的原因:为了进一步提高计算机多任务处理的工作能力。线程数越多,越有利于同时运行多个程序。

扩展资料:

线程数的多少,自然会影响到下载速度的多少,这样看来,下载线程数应该设置的越高越好,这样的理解是错误的。线程数的多少,要根据服务端和用户端的具体情况而定。

一般情况下,网络中的服务端,为用户提供的连接线程数,在1—10个,用户可以根据不同的服务端限制,来修改下载软件的原始下载线程数。根据下载资源的热门程度,其候选资源数量的不同,该任务下载可用的线程数也会不同,一般可以设置在35-50之间。

参考资料来源:百度百科-核心数量

参考资料来源:百度百科-线程数

看了很多书都说docker来部署应用可以隔离系统资源互不影响,直到这段时间出现的一系列问题又颠覆了我的认知。

发现docker并不能隔离真正隔离系统资源。最近k8s中的某一个应用总是被强制重启,由于监控体系没有完善,找了好久都没有找到原因,之前也有其它应用类似的问题是应为metaspace溢出导致的,但是此次事务毫无报错,严重时一天重启三次。有时候又一连好几天个把月没有问题。为了不让五一小长假的美好心情被破坏,觉定把这个问题彻底解决掉,好吧其实放假的第一天就被破坏了,当天重启了3次,为了后续的美好日子,决定把它根因找出来。看k8s日志发现每次重启都是健康检查失败导致重启,于是推断以下几种可能:

jvm 频繁GC导致进程stw挂起liveless prob探针超时

系统cpu负载过高导致处理超时

正对两种情况进行对应排查,有时候排查问题也是有点小麻烦,只能绕着想点其它办法,比如skywalking和arthas的冲突问题,比如docker包只打了jre,好吧就只能打印GC日志来观察情况了,排查过程就不讲了,反正排查半天最后发现内存方面没有问题。

所以就考虑第二种情况,cpu负载问题导致超时,于是先用top观察负载。发现load average值大概在8左右,但是发现这个负载值时机器的总平均负载,没办法查看当前docker容器的情况,但是这也不影响我做出正确的推断,配置的cpu核心数为05-1,宿主机和cpu核心数为16,相对16核心数8的负载算正常范围,忽然间又想到这个负载时基于进程级别的,要是我应用的线程数过多,而docker限制了cpu核心数,那么这里会不会出现问题呢?也就是当我进程中的一个线程在使用cpu时其它线程用不了,尽管cpu还有空闲,但是进程内的线程就不断产生上下文切换,导致探针超时,这个也完全有可能,于是按用top -H -p pid 查看线程情况,发现好家伙开了300多个线程,才配置05到1核的cpu 这个确实有点过分了。在观察的过程中发现间隔一分钟cpu使用率还会暴涨一次,好吧这个应用是个定时任务,每隔1分钟就会有10几个定时任务同时进来然后开3个线程处理这个10几个定时任务,每个线程进来又开了cpu核心x10个线程去处理子任务,那么如果此时有大量业务数据需要处理就会产生大量的上下文切换,就非常有可能导致探针请求超时。但是按道理说探针超时10秒这个也不太可能吧?

于是接着想到假如cpu又被其它docker容器的进程占用了呢?也就是说当前应用除了跟自己抢占资源外还需要跟其它的进程抢占资源,所以有可能等待更久。也就是这个应用本身是个cpu密集型的应用,给的cpu过少了。看代码的过程中又发现一个坑爹的地方,应用配置的默认线程数是cpu核心数10,由于docker容器中获取cpu核心数不准确的问题,导致cpu核心数获取到的是宿主机真正核心数16 也就是说实际上是3个线程各自开了160个线程在处理业务,意味着高峰期线程数可能达到480+其它线程的数量,这才导致了探针超时,因为轮半天可能每轮到它执行。

给线程池设置个参数,别开160个线程,外加增加cpu核心数重启完美解决此问题。

(一)方法一:在“任务管理器”里查看

(1)鼠标右键单击任务栏空白处,在d出的右键菜单里选择“任务管理器”。如下图

(2)在d出的“任务管理器”里,依次点击下图中的①②,在③处可以看到核心数(内核)和线程数(逻辑处理器):

(二)方法二:“设备管理器”里查看

(1)鼠标右键单击桌面左下角的win徽标,在d出的右键菜单里选择“控制面板”。如下图:

(2)在“控制面板”里点击“设备管理器”,注意“查看方式”是“小图标”。如下图:

(3)在“设备管理器”里,展开“处理器”一项,就可以看到cpu的型号和线程数。如下图:

(一)方法一:在“任务管理器”里查看

(1)鼠标右键单击任务栏空白处,在d出的右键菜单里选择“任务管理器”。如下图:

(2)在d出的“任务管理器”里,依次点击下图中的①②,在③处可以看到核心数(内核)和线程数(逻辑处理器):

(二)方法二:“设备管理器”里查看

(1)鼠标右键单击桌面左下角的win徽标,在d出的右键菜单里选择“控制面板”。如下图:

(2)在“控制面板”里点击“设备管理器”,注意“查看方式”是“小图标”。如下图:

(3)在“设备管理器”里,展开“处理器”一项,就可以看到cpu的型号和线程数。如下图:

以上就是关于CPU界面里的线程数是什么意思全部的内容,包括:CPU界面里的线程数是什么意思、CPU的核心数、线程数的关系和区别、docker读不到cpu数量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9458220.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存