linux 线程cpu,linux 查看cpu个数
CPU线程指什么
CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。>>>>尽管提高CPU的时钟频率和增加缓存容量后的确可以改善性能,但这样的CPU性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,CPU的执行单元都没有被充分使用。如果CPU不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏ILP(Instruction-LevelParallelism,多种指令同时执行)支持。这些都造成了目前CPU的性能没有得到全部的发挥。因此,Intel则采用另一个思路去提高CPU的性能,让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。>>>>采用超线程及时可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。>>>>超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个LogicalCPUPointer(逻辑处理单元)。因此新一代的P4HT的die的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2Cache(二级缓存)则保持不变,这些部分是被分享的。>>>>虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。>>>>英特尔P4超线程有两个运行模式,SingleTaskMode(单任务模式)及MultiTaskMode(多任务模式),当程序不支持Multi-Processing(多处理器作业)时,系统会停止其中一个逻辑CPU的运行,把资源集中于单个逻辑CPU中,让单线程程序不会因其中一个逻辑CPU闲置而减低性能,但由于被停止运行的逻辑CPU还是会等待工作,占用一定的资源,因此Hyper-ThreadingCPU运行SingleTaskMode程序模式时,有可能达不到不带超线程功能的CPU性能,但性能差距不会太大。也就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线程操作系统运行单线程软件时容易出现此问题。>>>>需要注意的是,含有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。目前支持超线程技术的芯片组包括如:英特尔i845GE、PE及矽统iSR658RDRAM、SiS645DX、SiS651可直接支持超线程;英特尔i845E、i850E通过升级BIOS后可支持;威盛P4X400、P4X400A可支持,但未获得正式授权。操作系统如:MicrosoftWindowsXP、MicrosoftWindows2003,Linuxkernel2.4.x以后的版本也支持超线程技术。
如何查看linux服务器的cpu数量,内核数,和cpu线程数
lscpu命令,查看的是cpu的统计信息.\x0d\x0ablue@blue-pc:~$ lscpu\x0d\x0aArchitecture: i686#cpu架构\x0d\x0aCPU op-mode(s): 32-bit, 64-bit\x0d\x0aByte Order: Little Endian#小尾序\x0d\x0aCPU(s): 4#总共有4核\x0d\x0aOn-line CPU(s) list: 0-3\x0d\x0aThread(s) per core: 1#每个cpu核,只能支持一个线程,即不支持超线程\x0d\x0aCore(s) per socket: 4#每个cpu,有4个核\x0d\x0aSocket(s): 1#总共有1一个cpu\x0d\x0aVendor ID: GenuineIntel#cpu产商 intel\x0d\x0aCPU family: 6\x0d\x0aModel: 42\x0d\x0aStepping: 7\x0d\x0aCPU MHz: 1600.000\x0d\x0aBogoMIPS: 5986.12\x0d\x0aVirtualization: VT-x#支持cpu虚拟化技术\x0d\x0aL1d cache: 32K\x0d\x0aL1i cache: 32K\x0d\x0aL2 cache: 256K\x0d\x0aL3 cache: 6144K\x0d\x0a \x0d\x0a查看/proc/cpuinfo,可以知道每个cpu信息,如每个CPU的型号,主频等。\x0d\x0a#cat/proc/cpuinfo\x0d\x0aprocessor: 0\x0d\x0avendor_id: GenuineIntel\x0d\x0acpu family: 6\x0d\x0amodel: 42\x0d\x0amodel name: Intel(R) Core(TM) i5-2320 CPU@ 3.00GHz\x0d\x0a.....\x0d\x0a上面输出的是第一个cpu部分信息,还有3个cpu信息省略了。\x0d\x0a \x0d\x0a内存\x0d\x0a概要查看内存情况\x0d\x0a free-m\x0d\x0a total used free shared buffers cached\x0d\x0a Mem: 3926 3651 274 0 12 404\x0d\x0a-/+ buffers/cache: 3235 691\x0d\x0a Swap: 9536 31 9505\x0d\x0a这里的单位是MB,总共的内存是3926MB。\x0d\x0a \x0d\x0a查看内存详细使用\x0d\x0a# cat/proc/meminfo\x0d\x0aMemTotal: 4020868 kB\x0d\x0aMemFree: 230884 kB\x0d\x0aBuffers: 7600 kB\x0d\x0aCached: 454772 kB\x0d\x0aSwapCached: 836 kB\x0d\x0a.....\x0d\x0a \x0d\x0a查看内存硬件信息\x0d\x0admidecode-t memory\x0d\x0a# dmidecode 2.11\x0d\x0aSMBIOS 2.7 present.\x0d\x0aHandle 0x0008, DMI type 16, 23 bytes\x0d\x0aPhysical Memory Array\x0d\x0a Location: System Board Or Motherboard\x0d\x0a....\x0d\x0a Maximum Capacity: 32 GB\x0d\x0a....\x0d\x0aHandle 0x000A, DMI type 17, 34 bytes\x0d\x0a....\x0d\x0aMemory Device\x0d\x0a Array Handle: 0x0008\x0d\x0a Error Information Handle: Not Provided\x0d\x0a Total Width: 64 bits\x0d\x0a Data Width: 64 bits\x0d\x0a Size: 4096 MB\x0d\x0a.....\x0d\x0a我的主板有4个槽位,只用了一个槽位,上面插了一条4096MB的内存。\x0d\x0a \x0d\x0a磁盘\x0d\x0a查看硬盘和分区分布\x0d\x0a# lsblk\x0d\x0aNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\x0d\x0asda 8:0 0 465.8G 0 disk\x0d\x0a├—sda1 8:1 0 1G 0 part/boot\x0d\x0a├—sda2 8:2 0 9.3G 0 part [SWAP]\x0d\x0a├—sda3 8:3 0 74.5G 0 part/\x0d\x0a├—sda4 8:4 0 1K 0 part\x0d\x0a├—sda5 8:5 0 111.8G 0 part/home\x0d\x0a└—sda6 8:6 0 269.2G 0 part\x0d\x0a显示很直观\x0d\x0a \x0d\x0a如果要看硬盘和分区的详细信息\x0d\x0a# fdisk-l\x0d\x0aDisk/dev/sda: 500.1 GB, 500107862016 bytes\x0d\x0a255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors\x0d\x0aUnits= sectors of 1* 512= 512 bytes\x0d\x0aSector size(logical/physical): 512 bytes/ 4096 bytes\x0d\x0aI/O size(minimum/optimal): 4096 bytes/ 4096 bytes\x0d\x0aDisk identifier: 0x00023728\x0d\x0a Device Boot Start End Blocks Id System\x0d\x0a/dev/sda1* 2048 2148351 1073152 83 Linux\x0d\x0a/dev/sda2 2148352 21680127 9765888 82 Linux swap/ Solaris\x0d\x0a/dev/sda3 21680128 177930239 78125056 83 Linux\x0d\x0a/dev/sda4 177932286 976771071 399419393 5 Extended/dev/sda5 177932288 412305407 117186560 83 Linux\x0d\x0a/dev/sda6 412307456 976771071 282231808 83 Linux\x0d\x0a \x0d\x0a网卡\x0d\x0a查看网卡硬件信息\x0d\x0a# lspci| grep-i'eth'\x0d\x0a02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller(rev 06)\x0d\x0a \x0d\x0a查看系统的所有网络接口\x0d\x0a# ifconfig-a\x0d\x0aeth0 Link encap:以太网硬件地址 b8:97:5a:17:b3:8f \x0d\x0a.....\x0d\x0alo Link encap:本地环回 \x0d\x0a.....\x0d\x0a或者是\x0d\x0aip link show\x0d\x0a1: lo: mtu 16436 qdisc noqueue state DOWN\x0d\x0alink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\x0d\x0a2: eth0:
linux线程优先级数字越大越高
linux内核线程怎么设置优先级?
Linux内核的三种调度策略:
1,SCHED_OTHER分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:intsched_get_priority_max(intpolicy);intsched_get_priority_min(intpolicy);SCHED_OTHER是不支持优先级使用的,而SCHED_FIFO和SCHED_RR支持优先级的使用,他们分别为1和99,数值越大优先级越高。设置和获取优先级通过以下两个函数:intpthread_attr_setschedparam(pthread_attr_t*attr,conststructsched_param*param);intpthread_attr_getschedparam(constpthread_attr_t*attr,structsched_param*param);例如以下代码创建了一个优先级为10的线程:structsched_param{int__sched_priority;//所要设定的线程优先级};例:创建优先级为10的线程pthread_attr_tattr;structsched_paramparam;pthread_attr_init(attr);pthread_attr_setschedpolicy(attr,SCHED_RR);param.sched_priority=10;pthread_attr_setschedparam(attr,?m);pthread_create(xxx,attr,xxx,xxx);pthread_attr_destroy(attr);
cpu多线程和jvm多线程?
一cpu个数、核数、线程数的关系
cpu个数:是指物理上,也及硬件上的核心数;
核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;一个CPU核心数模拟出2线程的CPU
线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数*核数,及程数=cpu个数(2)*核数(2)=4
Windows:wmic然后物理CPU数“cpugetNumberOfCores”,CPU核心数“cpugetNumberOfLogicalProcessors”
Linux:
查看CPU个数cat/proc/cpuinfo|grepphysicalid|sort|uniq|wc-l
查看核数cat/proc/cpuinfo|grepcpucores|uniq
二cpu线程数和Java多线程
(1)线程是CPU级别的,单个线程同时只能在单个cpu线程中执行
(2)Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。
(3)线程是操作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位
(4)Java中的所有线程在JVM进程中,CPU调度的是进程中的线程
线程的调度是指按照特定的机制为多个线程分配CPU的使用权。有两种调度模型:分时调度模型和抢占式调度模型
分时调度模型是指让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用CPU的时间片。
Java虚拟机采用抢占式调度模型,是指优先让可运行池中处于就绪态的线程中优先级高的占用CPU,如果可运行池中线程的优先级相同,那么就随机选择一个线程,使其占用CPU,处于运行状态的线程会一直执行,直至它不得不放弃CPU,一个线程会因为以下原因放弃CPU:
(1)Java虚拟机让当前线程暂时放弃CPU,转到就绪态,使其他线程获得运行机会
(2)当前线程因为某些原因而处于阻塞状态
(3)线程运行结束
Java线程让步:
3.Thread.yield()方法
就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行(根据CPU的调度),并不是单纯的让给其他线程。
4.等待其他线程结束:join()
当前运行的线程可以调用另一个线程的join()方法,当前运行的线程将转到阻塞状态,直至另一个线程运行结束,它才会恢复运行(阻塞恢复到就绪)
什么是线程调度器(ThreadScheduler)和时间分片(TimeSlicing)?
线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦创建一个线程并启动它,它的执行便依赖于线程调度器的实现。
时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。
线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让的程序依赖于线程的优先级)。
rtos和linux区别?
区别就是两者意思是不一样具体的不同如下
rtos是实时操作系统
RTOS(Real-TimeOperatingSystem),实时操作系统。
Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机