精华内容
下载资源
问答
  • CPU线程调度

    千次阅读 2014-09-01 09:25:27
    阿斯顿发 实验过程: 1.假设CPU数为n,创建n+1个线程。 2.1-n号线程先创建,运行while死循环。 3.n+1号线程最后创建,运行一开始先Sleep 0.1秒,然后不断写文件1.txt ...时间片用完后,CPU有没有更高

    实验过程:

            1.假设CPU数为n,创建n+1个线程。
            2.1-n号线程先创建,运行while死循环。
            3.n+1号线程最后创建,运行一开始先Sleep 0.1秒,然后不断写文件1.txt

    实验结果:
            1.txt被创建,内容为54M的"nihao"

    实验结论:
            相同优先级的多个线程平摊CPU时间,每个线程以时间片为执行单位。
            时间片用完后,CPU先看有没有更高优先级的线程等待执行,优先让级别高的先运行;然后看有没有同等优先级的线程等待运行,有就轮到它来执行。
            windows CPU调度以线程为调度粒度。


    线程状态转换图:


    线程阻塞会让出CPU

    导致阻塞的函数如WaitForSingleObject、recv、accept。

    线程调用阻塞式函数时就进入核心态开始执行核心代码了,不再执行用户代码,此时控制权就转交给OS的调度程序,调度程序会调用其他线程执行。

    只要线程进入阻塞或者挂起状态,调度器将剥夺其所分配的剩余CPU时间片,而执行别的线程


    实验代码:

    #include <string>
    #include <iostream>
    #include <fstream>
    #include <process.h>
    #include <Windows.h>
    
    unsigned int __stdcall F1(void *arg)
    {
    	while(1);
    	_endthreadex(0);
    	return 0;
    }
    
    unsigned int __stdcall F2(void *arg)
    {
    	Sleep(100);
    
    	std::ofstream o("C:\\Documents and Settings\\Administrator\\桌面\\1.txt", std::ios::app);
    	while(1)
    		o<<"nihao"<<std::endl;
    	_endthreadex(0);
    	return 0;
    }
    
    int main()
    {
    	SYSTEM_INFO si;
    	GetSystemInfo(&si);
    	int num = si.dwNumberOfProcessors;
    
    	for(int i = 0; i < num+1; i++)
    	{
    		if(i != num)
    			_beginthreadex(NULL, 0, F1, NULL, 0, NULL);
    		else
    			_beginthreadex(NULL, 0, F2, NULL, 0, NULL);
    	}
    
    	while(1)
    		Sleep(100000000);
    
    	return 0;
    }
    


    展开全文
  • CPU个数、CPU核心数、CPU线程

    千次阅读 2018-09-28 11:46:53
    CPU个数、CPU核心数、CPU线程数 转载自:https://www.cnblogs.com/kimsimple/p/7787018.html  我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的...

    CPU个数、CPU核心数、CPU线程数

    转载自:https://www.cnblogs.com/kimsimple/p/7787018.html

      我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与线程数的关系和区别。 

    CPU个数即CPU芯片个数

    CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。

    线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核心数。比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。我们从任务管理器的性能标签页中看到的是两个CPU。 比如Inte l赛扬G460是单核心,双线程的CPU,Intel 酷睿i3 3220是双核心 四线程,Intel 酷睿i7 4770K是四核心 八线程 ,Intel 酷睿i5 4570是四核心 四线程等等。 对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。 

    CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。 

    CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。 因此,线程数是一种逻辑的概念,简单地说,就是模拟出的 CPU 核心数。一个核心最少对应一个线程,但英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,即一个核心可以有两个到多个线程。

    设计决定,intel给他的x86设计了逻辑线程=2*物理核心数,ibm的power8是逻辑线程=8*物理核心数

    Hyper-Threading,超线程

     


     

    多核CPU

     多核心cpu主要分原生多核和封装多核。
      原生多核指的是真正意义上的多核,最早由AMD提出,每个核心之间都是完全独立的,都拥有自己的前端总线,不会造成冲突,即使在高负载状况下,每个核心都能保证自己的性能不受太大的影响,通俗的说,原生多核的抗压能力强,但是需要先进的工艺,每扩展一个核心都需要很多的研发时间。
      封装多核是只把多个核心直接封装在一起,比如Intel早期的PD双核系列,就是把两个单核直接封装在一起,但两核心只能共同拥有一条前端总线,在两个核心满载时,两个核心会争抢前端总线,导致性能大幅度下降,所以早期的PD被扣上了“高频低能”的帽子,要提高封装多核的性能,在多任务的高压下尽量减少性能损失,只能不断的扩大前端总线的总体大小,来弥补多核心争抢资源带来的性能损失,但这样做只能在一定程度上弥补性能的不足,和原生的比起来还是差了很多,而且后者成本比较高,优点在于多核心的发展要比原生快的多。

     

    核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构一级缓存二级缓存、执行单元、指令级单元和总线接口逻辑单元都会有科学的布局。

    双内核应该具备两个物理上的运算内核

    HT技术超线程技术,是造就了PENTIUM 4的一个辉煌时代的武器,尽管它被评为失败的技术,但是却对P4起一定推广作用,双核心处理器是全新推出的处理器类别;HT技术是在处理器实现2个逻辑处理器,是充分利用处理器资源,双核心处理器是集成2个物理核心,是实际意义上的双核心处理器。

    多核心处理器(英语:Multi-core processor),又称多核心微处理器,是在单个计算组件中,加入两个或以上的独立实体中央处理单元(简称核心,英语:Core)。这些核心可以分别独立地运行程序指令,利用并行计算的能力加快程序的运行速度。只有两个核心的处理器,称为双核心处理器(dual-core processor)。“多核心”通常是对于中央处理器(Central Processing Unit,CPU)而论的,但是某些时候也指数字信号处理器(DSP)和系统芯片(SoC)。

    通常,把将两个或更多独立处理器封装在一个单一集成电路(IC)中的方案称为多核心处理器;而封装在不同IC中的独立处理器形成的计算机系统被称为多处理器

    多核心处理器!=多处理器

    多核心处理器可以在不将每个核心分别独立物理封装的情况下进行多任务处理(线程级并发处理Thread-Level Parallelism,TLP),这种形式的TLP通常被认为是芯片级多处理)。

     


    单核多CPU与多核单CPU

    一台计算机的处理器部分的架构

    单核多CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。(一致性问题)

    假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,怎么办?那么多Cache,即使我们不心疼存储能力的浪费,一致性怎么保证?

    多核单CPU,那么我们只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。

     

    多个CPU常见于分布式系统,用于普通消费级市场的不多,多用于cluster,云计算平台什么的。多CPU架构最大的瓶颈就是I/O,尤其是各个CPU之间的通讯,低成本的都用100M以太网做,稍微好一点的用1000M以太网,再好的就用光纤等等,但无论如何速度和通量都比不上主板的主线。所以多CPU适用于大计算量,对速度(时间)不(太)敏感的任务,比如一些工程建模,或者像SATI找外星人这种极端的,跑上几千年都不着急的。而且多CPU架构更简单清晰,可以用消费级产品简单做数量堆叠,成本上有优势。而多核单CPU则适合对通讯I/O速度要求较快的应用,(相同核数量下)成本上也高一些,好像只有在超级计算机里会用到以万为单位的核心数,普通消费级产品也就是到16核封顶了,因为成本控制的原因。

     

     


    在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中分别输入“cpu get Name”,“cpu get NumberOfCores”,“cpu get NumberOfLogicalProcessors”即可查看物理CPU数、CPU核心数、线程数。
    如下图所示:

    Name:表示物理CPU数 
    NumberOfCores:表示CPU核心数 
    NumberOfLogicalProcessors:表示CPU线程数
    注释:VM虚拟机中的CPU选择的核心数实际是代表线程数。

    输入“cpu get *”也可

    2.在cmd命令中输入“systeminfo”,以下信息表示物理CPU有两个

       

    展开全文
  • CPU 进程 线程

    千次阅读 2018-03-20 17:30:06
    1:CPU CPU是中央处理器,是一台计算机的运算核心...线程是进程的实体,属于进程,是CPU调度和分派的基本单位,CPU将资源分配 给进程,所有线程共享该进程的资源。一个tomcat对应一个进程,访问 tomcat下的应用的时...

    1:CPU

    CPU是中央处理器,是一台计算机的运算核心和控制核心。
    

    2:进程

    进程,一个进程就是一个具有独立功能的应用程序,关于某个数据集合上的一次
    运行活动。进程是系统进行资源分配和调度的一个独立单位。
    

    3:线程

    线程是进程的实体,属于进程,是CPU调度和分派的基本单位,CPU将资源分配
    给进程,所有线程共享该进程的资源。一个tomcat对应一个进程,访问
    tomcat下的应用的时候,就是一个启动线程。
    

    4:关系

    在单核CPU时代,单CPU在同一个时间点,只能执行一个线程,因为只有一个核
    心,如果有两个程序在同一时段执行,就是有两个线程,CPU也只是并发处理,
    系统帮助切换时间,系统给每个线程分配时间片来执行,看起来像是同时跑, 但
    实际上是每个线程跑一点点就换到其它线程继续跑,暂停的线程就由程序计数器
    记下作为下次的起始点,因为CPU在线程之间切换比较快。
    
    在多核CPU时代,多核CPU就是在一个CPU中集成了多个核心,这时候可以多个线
    程并行执行了,因为一个核心执行一个线程。
    
    在单核下运行多线程,因为只有一个出口,系统会来回切换,会有线程处于等待
    状态:
    
        如果一个应用程序复杂,计算较多,可以做成多线程,因为现在是以线程为
        单位进程切换的,所以你把一个计算分成多个线程分块执行肯定比单一线程
        执行快的。如果单纯的一个简单应用,单线程比多线程好,因为不用系统切换CPU。
    
        在单一进程等待IO操作时CPU空闲的时候,使用多线程加快程序运行速度。
    
    在多核CPU时代,因为线程可以并行运行,所以任务会执行快得多。
    
    展开全文
  • CPU个数、CPU核心数、CPU线程数  我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面文本...

    原文地址:https://www.cnblogs.com/kimsimple/p/7787018.html

    CPU个数、CPU核心数、CPU线程数

     

      我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与线程数的关系和区别。 

    CPU个数即CPU芯片个数

    CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。

    线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核心数。比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。我们从任务管理器的性能标签页中看到的是两个CPU。 比如Inte l赛扬G460是单核心,双线程的CPU,Intel 酷睿i3 3220是双核心 四线程,Intel 酷睿i7 4770K是四核心 八线程 ,Intel 酷睿i5 4570是四核心 四线程等等。 对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。 

    CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。 

    CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。 因此,线程数是一种逻辑的概念,简单地说,就是模拟出的 CPU 核心数。一个核心最少对应一个线程,但英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,即一个核心可以有两个到多个线程。

    设计决定,intel给他的x86设计了逻辑线程=2*物理核心数,ibm的power8是逻辑线程=8*物理核心数

    Hyper-Threading,超线程

     


     

    多核CPU

     多核心cpu主要分原生多核和封装多核。
      原生多核指的是真正意义上的多核,最早由AMD提出,每个核心之间都是完全独立的,都拥有自己的前端总线,不会造成冲突,即使在高负载状况下,每个核心都能保证自己的性能不受太大的影响,通俗的说,原生多核的抗压能力强,但是需要先进的工艺,每扩展一个核心都需要很多的研发时间。
      封装多核是只把多个核心直接封装在一起,比如Intel早期的PD双核系列,就是把两个单核直接封装在一起,但两核心只能共同拥有一条前端总线,在两个核心满载时,两个核心会争抢前端总线,导致性能大幅度下降,所以早期的PD被扣上了“高频低能”的帽子,要提高封装多核的性能,在多任务的高压下尽量减少性能损失,只能不断的扩大前端总线的总体大小,来弥补多核心争抢资源带来的性能损失,但这样做只能在一定程度上弥补性能的不足,和原生的比起来还是差了很多,而且后者成本比较高,优点在于多核心的发展要比原生快的多。

     

    核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构一级缓存二级缓存、执行单元、指令级单元和总线接口逻辑单元都会有科学的布局。

    双内核应该具备两个物理上的运算内核

    HT技术超线程技术,是造就了PENTIUM 4的一个辉煌时代的武器,尽管它被评为失败的技术,但是却对P4起一定推广作用,双核心处理器是全新推出的处理器类别;HT技术是在处理器实现2个逻辑处理器,是充分利用处理器资源,双核心处理器是集成2个物理核心,是实际意义上的双核心处理器。

    多核心处理器(英语:Multi-core processor),又称多核心微处理器,是在单个计算组件中,加入两个或以上的独立实体中央处理单元(简称核心,英语:Core)。这些核心可以分别独立地运行程序指令,利用并行计算的能力加快程序的运行速度。只有两个核心的处理器,称为双核心处理器(dual-core processor)。“多核心”通常是对于中央处理器(Central Processing Unit,CPU)而论的,但是某些时候也指数字信号处理器(DSP)和系统芯片(SoC)。

    通常,把将两个或更多独立处理器封装在一个单一集成电路(IC)中的方案称为多核心处理器;而封装在不同IC中的独立处理器形成的计算机系统被称为多处理器

    多核心处理器!=多处理器

    多核心处理器可以在不将每个核心分别独立物理封装的情况下进行多任务处理(线程级并发处理Thread-Level Parallelism,TLP),这种形式的TLP通常被认为是芯片级多处理)。

     


    单核多CPU与多核单CPU

    一台计算机的处理器部分的架构

    单核多CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。(一致性问题)

    假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,怎么办?那么多Cache,即使我们不心疼存储能力的浪费,一致性怎么保证?

    多核单CPU,那么我们只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。

     

    多个CPU常见于分布式系统,用于普通消费级市场的不多,多用于cluster,云计算平台什么的。多CPU架构最大的瓶颈就是I/O,尤其是各个CPU之间的通讯,低成本的都用100M以太网做,稍微好一点的用1000M以太网,再好的就用光纤等等,但无论如何速度和通量都比不上主板的主线。所以多CPU适用于大计算量,对速度(时间)不(太)敏感的任务,比如一些工程建模,或者像SATI找外星人这种极端的,跑上几千年都不着急的。而且多CPU架构更简单清晰,可以用消费级产品简单做数量堆叠,成本上有优势。而多核单CPU则适合对通讯I/O速度要求较快的应用,(相同核数量下)成本上也高一些,好像只有在超级计算机里会用到以万为单位的核心数,普通消费级产品也就是到16核封顶了,因为成本控制的原因。

     

     


    附 - 获取CPU逻辑核个数的代码

    在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中分别输入“cpu get Name”,“cpu get NumberOfCores”,“cpu get NumberOfLogicalProcessors”即可查看物理CPU数、CPU核心数、线程数。
    如下图所示:

    Name:表示物理CPU数 
    NumberOfCores:表示CPU核心数 
    NumberOfLogicalProcessors:表示CPU线程数
    注释:VM虚拟机中的CPU选择的核心数实际是代表线程数。

    输入“cpu get *”也可

    2.在cmd命令中输入“systeminfo”,以下信息表示物理CPU有两个

       

     

    另外,获取CPU逻辑核数(线程数),使用GetLogicalProcessorInformation API(url:https://docs.microsoft.com/zh-cn/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformation),但该函数只支持到XP SP3版本,之前的windows系统则不支持!最新在线MSDN上的给的示例代码:(VS2008自带的MSDN上的示例代码较老,使用在线最新版本的MSDN上的代码)

    #include <windows.h>
    #include <malloc.h>    
    #include <stdio.h>
    #include <tchar.h>
    
    typedef BOOL (WINAPI *LPFN_GLPI)(
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, 
        PDWORD);
    
    
    // Helper function to count set bits in the processor mask.
    DWORD CountSetBits(ULONG_PTR bitMask)
    {
        DWORD LSHIFT = sizeof(ULONG_PTR)*8 - 1;
        DWORD bitSetCount = 0;
        ULONG_PTR bitTest = (ULONG_PTR)1 << LSHIFT;    
        DWORD i;
        
        for (i = 0; i <= LSHIFT; ++i)
        {
            bitSetCount += ((bitMask & bitTest)?1:0);
            bitTest/=2;
        }
    
        return bitSetCount;
    }
    
    int _cdecl _tmain ()
    {
        LPFN_GLPI glpi;
        BOOL done = FALSE;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
        DWORD returnLength = 0;
        DWORD logicalProcessorCount = 0;
        DWORD numaNodeCount = 0;
        DWORD processorCoreCount = 0;
        DWORD processorL1CacheCount = 0;
        DWORD processorL2CacheCount = 0;
        DWORD processorL3CacheCount = 0;
        DWORD processorPackageCount = 0;
        DWORD byteOffset = 0;
        PCACHE_DESCRIPTOR Cache;
    
        glpi = (LPFN_GLPI) GetProcAddress(
                                GetModuleHandle(TEXT("kernel32")),
                                "GetLogicalProcessorInformation");
        if (NULL == glpi) 
        {
            _tprintf(TEXT("\nGetLogicalProcessorInformation is not supported.\n"));
            return (1);
        }
    
        while (!done)
        {
            DWORD rc = glpi(buffer, &returnLength);
    
            if (FALSE == rc) 
            {
                if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) 
                {
                    if (buffer) 
                        free(buffer);
    
                    buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
                            returnLength);
    
                    if (NULL == buffer) 
                    {
                        _tprintf(TEXT("\nError: Allocation failure\n"));
                        return (2);
                    }
                } 
                else 
                {
                    _tprintf(TEXT("\nError %d\n"), GetLastError());
                    return (3);
                }
            } 
            else
            {
                done = TRUE;
            }
        }
    
        ptr = buffer;
    
        while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength) 
        {
            switch (ptr->Relationship) 
            {
            case RelationNumaNode:
                // Non-NUMA systems report a single record of this type.
                numaNodeCount++;
                break;
    
            case RelationProcessorCore:
                processorCoreCount++;
    
                // A hyperthreaded core supplies more than one logical processor.
                logicalProcessorCount += CountSetBits(ptr->ProcessorMask);
                break;
    
            case RelationCache:
                // Cache data is in ptr->Cache, one CACHE_DESCRIPTOR structure for each cache. 
                Cache = &ptr->Cache;
                if (Cache->Level == 1)
                {
                    processorL1CacheCount++;
                }
                else if (Cache->Level == 2)
                {
                    processorL2CacheCount++;
                }
                else if (Cache->Level == 3)
                {
                    processorL3CacheCount++;
                }
                break;
    
            case RelationProcessorPackage:
                // Logical processors share a physical package.
                processorPackageCount++;
                break;
    
            default:
                _tprintf(TEXT("\nError: Unsupported LOGICAL_PROCESSOR_RELATIONSHIP value.\n"));
                break;
            }
            byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
            ptr++;
        }
    
        _tprintf(TEXT("\nGetLogicalProcessorInformation results:\n"));
        _tprintf(TEXT("Number of NUMA nodes: %d\n"), 
                 numaNodeCount);
        _tprintf(TEXT("Number of physical processor packages: %d\n"), 
                 processorPackageCount);
        _tprintf(TEXT("Number of processor cores: %d\n"), 
                 processorCoreCount);
        _tprintf(TEXT("Number of logical processors: %d\n"), 
                 logicalProcessorCount);
        _tprintf(TEXT("Number of processor L1/L2/L3 caches: %d/%d/%d\n"), 
                 processorL1CacheCount,
                 processorL2CacheCount,
                 processorL3CacheCount);
        
        free(buffer);
    
        return 0;
    }

    对于XP SP3之前的系统,则只能使用GetSystemInfo API来获取了。现在基本上都是XPSP3及以上的系统了。

    另外,在MSDN上对SYSTEMINFO结构体的说明中也提到,要获取CPU逻辑核的个数,要使用GetLogicalProcessorInformation:

    结构体中关于dwNumberOfProcessors字段的说明:

    展开全文
  • 可以用下面的命令将 cpu 占用率高的线程找出来:  ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后...
  • Java代码: System.out.println(Runtime.getRuntime()....线程池设置最大线程数量公式: 线程池大小 = CPU的数量 × 目标CPU的使用率 × (1+等待时间与计算时间的比) 有用点个关注,手留余香! ???? ???? ???? ...
  • 线程CPU上是怎样分布的

    千次阅读 2019-07-09 16:29:02
    关于Java多线程CPU上分布的问题,首先要明白一点,它与CPU是多核还是双核并没有必然的联系。CPU有时只能执行一个线程,这是因为在多线程并行执行时,CPU可以根据一定的算法来调度和切换线程。一般而言对于多线程的...
  • 以下内容来源于网络,本人收集整理了一下。 先说核心数吧,核心数指CPU的内核数量,线程数指CPU可以同时处理的进程数量。...超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU
  • 物理CPU CPU核数 逻辑CPU 几核几线程的概念详解

    万次阅读 多人点赞 2017-10-26 20:10:42
    物理CPU 物理CPU就是计算机上实际配置的CPU个数。在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,你能找到几个physical id就代表你的计算机实际有几个CPU。在linux下可以通过...
  • Java线程CPU时间片

    千次阅读 2018-04-29 10:04:17
    Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况: 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说...
  • docker 增加cpu线程

    千次阅读 2018-12-10 11:28:23
    docker run –name container_my it -c 1024 progrium/stress –cpu 1 : –cpu 用来设置工作线程的数量。当前 host 只有 1 颗 CPU,所以一个工作线程就能将 CPU 压满。如果 host 有多颗 CPU,则需要相应增加 –cpu ...
  • Java线程何时放弃CPU时间片

    千次阅读 2020-01-11 11:30:41
    线程CPU执行 Java中内置支持在一个进程中运行多个线程线程的执行由JVM进行管理。每个线程从启动到结束的过程中可能经历多种状态,多个线程则意味着并发,而并发则涉及CPU的执行时间片。下图是三个线程分配到的...
  • API-线程等待CPU优化 用到的API 1、MsgWaitForMultipleObjects 2、WaitForSingleObject 3、SetThreadAffinityMask 4、SetThreadIdealProcessor 511遇见易语言多线程大漠多线程 模块源码 .子程序 线程_等待, ...
  • 多核cpu与多线程理解

    万次阅读 2019-01-04 17:00:38
    实现多进程依靠于操作系统的进程调度算法,比如时间片轮转算法,比如有3个正在运行的程序(即三个进程),操作系统会让单核cpu轮流来运行这些进程,然后一个进程只运行2ms,这样起来就像多个进程同时在运行...
  • linux 查看java最高cpu线程

    千次阅读 2018-03-01 11:25:48
    #新建javacpu.sh ,并赋予可执行权限#!/bin/bashJAVA_PID=`top -b -n 1|grep java|head -n 1|awk '{print $1}'`HIGH_CPU_TID=`ps -mp $JAVA_PID -o THREAD,tid,time | sort -rn |head -n 3 |tail -n 1 |awk '{print ...
  • cpu个数、核数、线程数、Java多线程关系的理解

    万次阅读 热门讨论 2017-12-08 15:35:37
    一 cpu个数、核数、线程数的关系 cpu个数:是指物理上,也及硬件上的核心数; 核数:是逻辑上的,简单理解为逻辑上模拟出...(1) 单个cpu线程在同一时刻只能执行单一指令,也就是一个线程。 (2) 单个线程同时只能...
  • Linux进程、线程绑定CPU以及独占CPU

    千次阅读 2019-11-01 16:54:49
    在很早之前就了解一项技术:线程绑定cpu。该项技术也应用到各种应用软件,来提高性能。这里把自己做的一个实验记录下来,方便日后查阅。 一、进程绑定cpu 我们通过系统调用sched_setaffinity进行绑定,通过sched_...
  • 处理器CPU概念及CPU线程

    千次阅读 2016-03-30 16:55:56
    (1)socket就是主板上插cpu的槽的数目,也即管理员说的”路“  芯片厂商会把一个或多个Core封装在一个chip上,称作Socket(插槽)。假设一个插槽有两个Core,主板上插2个插槽,就是4核系统。 (2)core就是我们平时...
  • 线程绑定CPU

    千次阅读 2014-05-20 14:15:04
    线程绑定CPU,顾名思义,就是是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于进程的情况,一般是使用sched_setaffinity这个函数来实现,网上讲的也比较多,这里主要讲一下线程的情况。  与进程的...
  • C++多线程,为线程绑定cpu

    千次阅读 2019-06-25 18:40:12
    文章目录1,使用2,函数 ...set_cpu("detector", {0, 1, 2}); 2,函数 void set_cpu(std::string thread_name, std::vector<short> cpu_ids) { int i, cpus = 0; cpu_set_t mask; cpu_set_t get; cpus...
  • CPU切换线程的相关理解

    千次阅读 2019-10-29 14:52:27
    CPU的时间是按时间片分的,而不是一个时间点,并发问题是由于CPU线程切换导致的。 现在假设有一段代码 if(i == 1) { i++; //断点1 system.out.print(i); } //断点2  有两个线程A,B同时执行这一段代码,...
  • 物理CPUCPU核数、逻辑CPU、超线程

    千次阅读 2018-11-24 15:41:07
    基本概念 物理CPU: 物理CPU就是插在主机上的真实的CPU硬件,在Linux下可以数不同的physical id 来确认主机的物理CPU个数。...核心数下一层的概念是逻辑CPU,逻辑CPU跟超线程技术有联系,假...
  • [Java] 查看占用 CPU 最高的线程

    千次阅读 2018-10-06 14:53:44
    先用 top 命令找出进程中占用 CPU 最高的线程pid,再用 jstack 找出具体的线程堆栈。
  • c++ 获取cpu最大线程

    千次阅读 2019-07-03 09:50:05
    #include <thread> std::thread::hardware_concurrency() //获取cpu最大线程数,超了会降低效率。
  • C#线程绑定到指定cpu

    千次阅读 2016-11-02 11:48:08
    c#cpu线程绑定
  • 单核cpu多核cpu如何执行多线程

    千次阅读 2020-03-31 11:19:00
    花了很多时间来整理这方面的相关内容 程序和进程 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码 进程: 是程序的一次执行过程,或是...一个进程同一时间并行多个线程,多线程是程序有多...
  • CPU核心数目 与 多线程

    万次阅读 2017-03-16 22:05:23
    CPU核数跟多线程的关系一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的?今天就这一问题查了一些资料,现整理如下:要说多线程就离不开进程,进程和线程的区别在这里就不详细说...
  • 1.多线程在单核和多核CPU上的执行效率问题的讨论a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)多个cpu的话就可以在两个cpu中同时执行了..............a2: ...
  • Java:线程CPU核心数目 与 多线程

    千次阅读 2018-10-01 00:16:29
     就绪:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 624,082
精华内容 249,632
关键字:

怎样看cpu线程