导航:首页 > 编程系统 > linux几核几线程

linux几核几线程

发布时间:2023-09-07 21:14:24

A. 怎么查看linux的cpu核数

|1.查看逻辑CPU个数:
#cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
24
2.由于有超线程技术有必要查看一下物理CPU个数:
#grep "physical id" /proc/cpuinfo|sort -u|wc -l
2
#grep "physical id" /proc/cpuinfo|sort -u
physical id : 0
physical id : 1
查看每个物理CPU内核个数:
#grep "cpu cores" /proc/cpuinfo|uniq
cpu cores : 6
每个物理CPU上逻辑CPU个数:
#grep "siblings" /proc/cpuinfo|uniq
siblings : 12

B. 现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)

现在的技术,还是一个线程只能运行在一个 CPU 上。多核心,必须用多线程/进程来运行才能实现最大化。当然,你可以单个线程不停的在所有的 CPU 上来回跳。但是效率会很低很低。
因为 CPU 有寄存器和缓存的问题。如果你切换 CPU 运行,所有的数据都要进行一次传递。非常浪费时钟(在 CPU 上,程序执行不是一个时钟马上就能任意执行一个指令,而是流水线作业,一个指令需要很多个时钟才能处理完,数据存取也都要等)。

这也因为程序原本就都是顺序执行的。你没办法让一个程序的后面的结果可以跳过前面的结果而得出。
当然,现在 CPU 确实有这种技术,叫做乱序执行。也就是当前面的过程还没有计算时,后面的指令先计算。但是这种事情是要靠猜测的,而且这也仅仅是分支预测,依然不能预测某个计算的结果。即便猜的再准确,也有错的时候。奔腾4 最老的版本就有这个问题,流水线太长。计算后发现错了。整条流水线需要清空重新计算。有严重性能问题的奔腾4 CPU ,流水线长度是 31 级。也就是一个程序至少 31 个时钟周期才能从推到流水线后到真正执行。直接浪费了 31 个时钟周期。

所以目前的技术来说,单线程多核新协同计算,技术上不可能实现。
提高性能,就是整理数据处理的算法,把多次重复计算的过程,拆成多条线程分别计算。从而保证 CPU 多核新的效率最大化。每个线程可以共享同一块数据,自己读取自己的数据计算使可以的。不过,这时候就有另外一个问题,数据寻址和传递的性能问题。

C. Linux 进程、线程和CPU的关系,cpu亲和性

1、物理CPU数:机器主板上实际插入的cpu数量,比如说你的主板上安装了一块8核CPU,那么物理CPU个数就是1个,所以物理CPU个数就是主板上安装的CPU个数。

2、物理CPU核数:单个物理CPU上面有多个核,物理CPU核数=物理CPU数✖️单个物理CPU的核
3、逻辑CPU核数:一般情况,我们认为一颗CPU可以有多个核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的CPU core出来。逻辑CPU核数=物理CPU数✖️单个物理CPU的核*2
4、超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑CPU模拟成两个物理CPU,实现多核多线程。我们常听到的双核四线程/四核八线程指的就是支持超线程技术的CPU。

1、并行:两件(多件)事情在同一时刻一起发生。
2、并发:两件(多件)事情在同一时刻只能有一个发生,由于CPU快速切换,从而给人的感觉是同时进行。
3、进程和线程
进程是资源分配的最小单位,一个程序有至少一个进程。线程是程序执行的最小单位。一个进程有至少一个线程。
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
4、单核多线程:单核CPU上运行多线程, 同一时刻只有一个线程在跑,系统进行线程切换,系统给每个线程分配时间片来执行,看起来就像是同时在跑, 但实际上是每个线程跑一点点就换到其它线程继续跑。
5、多核多线程:每个核上各自运行线程,同一时刻可以有多个线程同时在跑。

1、对于单核:多线程和多进程的多任务是在单cpu交替执行(时间片轮转调度,优先级调度等),属于并发
2、对于多核:同一个时间多个进程运行在不同的CPU核上,或者是同一个时间多个线程能分布在不同的CPU核上(线程数小于内核数),属于并行。
3、上下文切换:上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB-Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中,直到被再次使用。

CPU 亲和性(affinity)就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。这样可以减少上下文切换的次数,提高程序运行性能。可分为:自然亲和性和硬亲和性
1、自然亲和性:就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。Linux调度器缺省就支持自然CPU亲和性(natural CPU affinity): 调度器会试图保持进程在相同的CPU上运行。
2、硬亲和性:简单来说就是利用linux内核提供给用户的API,强行将进程或者线程绑定到某一个指定的cpu核运行。Linux硬亲和性指定API:taskset .

taskset [options] mask command [arg]...
taskset [options] -p [mask] pid

taskset 命令用于设置或者获取一直指定的 PID 对于 CPU 核的运行依赖关系。也可以用 taskset 启动一个命令,直接设置它的 CPU 核的运行依赖关系。

CPU 核依赖关系是指,命令会被在指定的 CPU 核中运行,而不会再其他 CPU 核中运行的一种调度关系。需要说明的是,在正常情况下,为了系统性能的原因,调度器会尽可能的在一个 CPU 核中维持一个进程的执行。强制指定特殊的 CPU 核依赖关系对于特殊的应用是有意义的
CPU 核的定义采用位定义的方式进行,最低位代表 CPU0,然后依次排序。这种位定义可以超过系统实际的 CPU 总数,并不会存在问题。通过命令获得的这种 CPU 位标记,只会包含系统实际 CPU 的数目。如果设定的位标记少于系统 CPU 的实际数目,那么命令会产生一个错误。当然这种给定的和获取的位标记采用 16 进制标识。
0x00000001
代表 #0 CPU
0x00000003
代表 #0 和 #1 CPU
0xFFFFFFFF
代表 #0 到 #31 CPU

-p, --pid
对一个现有的进程进行操作,而不是启动一个新的进程
-c, --cpu-list
使用 CPU 编号替代位标记,这可以是一个列表,列表中可以使用逗号分隔,或者使用 "-" 进行范围标记,例如:0,5,7,9
-h, --help
打印帮助信息
-V, --version
打印版本信息

如果需要设定,那么需要拥有 CAP_SYS_NICE 的权限;如果要获取设定信息,没有任何权限要求。

taskset 命令属于 util-linux-ng 包,可以使用 yum 直接安装。

D. linux查看cpu核数和内存大小

linux查看cpu核数和内存大小命令分别为:

1、查看CPU个数*核心数:

cat /proc/cpuinfo |grep“physical id” | uniq | wc -l

96 #一共96核

2、查看内存总数

#cat /proc/meminfo | grep MemTotal

MemTotal: 230993600 kB

Linux下查看CPU型号,内存大小,硬盘空间的命令:

1、查看CPU核数

cat /proc/cpuinfo | grep “cpu cores” | uniq

cpu cores : 12 #12是单颗CPU的核心数

2、查看CPU型号

cat /proc/cpuinfo | grep ‘model name’ |uniq

model name : Intel® Xeon® CPU E7-4830 v3 @ 2.10GHz

3、查看linux物理内存数量及大小

dmidecode -t memory | grep Size: | grep -v “No Mole Installed”

E. linux下判断cpu物理个数,几核,是超线程还是多核心

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

F. linux单进程如何实现多核cpu多线程分配

linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法


1:利用linux系统自己的线程切换机制,有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现。但是要注意,如果线程函数内部的有某个循环,且该循环内没有任何系统调用的话,可能会导致这个线程的CPU时间无法被切换出去。也就是占满CPU现象,此时加个系统调用,例如sleep,线程所占的CPU时间就可以切换出去了。


2:利用pthread库自带的线程亲和性设置函数,来设置线程在某个CPU核心上跑,这个需要在程序内部实现。同时注意不要和进程亲和性设置搞混淆了

intpthread_setaffinity_np(pthread_tthread,size_tcpusetsize,
constcpu_set_t*cpuset);
intpthread_getaffinity_np(pthread_tthread,size_tcpusetsize,
cpu_set_t*cpuset);
从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、设置以及判断:
//初始化,设为空
voidCPU_ZERO(cpu_set_t*set);
//将某个cpu加入cpu集中
voidCPU_SET(intcpu,cpu_set_t*set);
//将某个cpu从cpu集中移出
voidCPU_CLR(intcpu,cpu_set_t*set);
//判断某个cpu是否已在cpu集中设置了
intCPU_ISSET(intcpu,constcpu_set_t*set);

G. linux下如何看有几个cpu

cat /proc/cpuinfo中的信息

processor 逻辑处理器的id。
physical id 物理封装的处理器的id。
core id 每个核心的id。
cpu cores 位于相同物理封装的处理器中的内核数量。
siblings 位于相同物理封装的处理器中的逻辑处理器的数量。

1 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
2、 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc –l
3、 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
4、 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq
5、 # uname -a
6、 Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)
7、 # cat /etc/issue | grep Linux
8、 Red Hat Enterprise Linux AS release 4 (Nahant Update 5(查看当前操作系统发行版信息)
9、 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)
9 # cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)

10、# getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

11、# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc –l
8(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

12、如何获得CPU的详细信息:
linux命令:cat /proc/cpuinfo
13、用命令判断几个物理CPU,几个核等:
逻辑CPU个数:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
14、每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
15、是否为超线程?如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep "siblings"

1.查看CPU信息命令
cat /proc/cpuinfo
2.查看内存信息命令
cat /proc/meminfo
3.查看硬盘信息命令
fdisk -l

查看CPU信息(型号)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)

# cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)
PS:Jay added on 10th, May, 2011
# 其实是可能有超线程HT技术,不一定是有4核,也可能是2核4线程;当时还理解不清楚

# getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

再完整看cpu详细信息, 不过大部分我们都不关心而已.
# dmidecode | grep 'Processor Information'

查看内 存信息
# cat /proc/meminfo

# uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)

# cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看当前操作系统发行版信息)

查看机器型号
# dmidecode | grep "Proct Name"

查看网卡信息
# dmesg | grep -i eth

H. linux cpu使用率是单核还是多核的

这个是要看抄具体你的袭机器配置的
1、使用top命令查看
top运行后,按1,即可看到几核
2、看cpuinfo 信息
cat /proc/cpuinfo |grep "cores"|uniq

3、关于cpu使用率,可以看每核心的占比,然后算一下平均值

阅读全文

与linux几核几线程相关的资料

热点内容
无锡哪里卖编程书 浏览:857
实现打开文件 浏览:572
s7数据开关在哪里 浏览:361
gvim如何调出文件目录 浏览:587
藏建通在什么网站下载 浏览:323
手机qq怎么改群的名字 浏览:574
美术类的论文主要发表在哪个网站 浏览:8
nodejs6await作用域 浏览:386
editplus调试js文件 浏览:827
电脑数据的u是什么意思 浏览:718
电子照片怎么弄成压缩文件 浏览:285
苹果推送电信运营商配置文件 浏览:748
受精24天数据在多少 浏览:502
计算机网络第二章习题 浏览:821
怎么把pdf文件里的字复制到word 浏览:255
健走app哪个轨迹最准 浏览:650
win10手机系统转安卓系统软件 浏览:313
哪个银行app能代缴违停罚款 浏览:555
苹果导出微信文件 浏览:518
win10宽带拨号连接720 浏览:219

友情链接