原文 http://blog.csdn.net/qingchen191/article/details/20478651
一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的?
今天就这一问题查了一些资料,现整理如下:
要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点:
a)进程之间是相互独立的,不共享内存和数据,线程之间的内存和数据是公用的,每个线程只有自己的一组CPU指令、寄存器和堆栈,对于线程来说只有CPU里的东西是自己独享的,程序中的其他东西都是跟同一个进程里的其他线程共享的。
b)操作系统创建进程时要分配好多外部资源,所以开销大。(这个跟操作系统有关,有人做过实验,window创建进程的开销大,linux创建进程的开销就很小。)
再来说一下CPU,在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务,具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了。
我们假设一个极端的情况:在一台单核计算机上只运行2个程序,一个是我们的程序A,另一个是操作系统的程序B,每个程序是一个进程。单核CPU的时候,A和B在CPU上交替运行,具体的分配方式由操作系统来判断,我这里猜测应该跟A和B的线程数有关,因为线程是CPU级别的,如果A有5个线程,B也有5个线程,那么CPU分配给A和B的时间应该是1:1的;如果A增加到15个线程,CPU分配给A和B的时间应该是3:1的比例。所以此时如果A的线程数多,那么获得的CPU执行次数就多,处理的速度也就快了。以上假设的前提是:①A和B的优先级相同,②A和B都是只消耗CPU资源的程序。
如果相同的情况用一个双核的计算机来处理又会是什么结果呢?假设这个双核的计算机和操作系统比较傻,把A进程分配到核1上,B进程分配到核2上,那不管A有几个线程,都是用核1来处理,那么时间肯定是一样的。不过现实中应该不会有这么傻的CPU和操作系统吧。 所以赶紧还是会根据线程来进行处理,当A的线程比B多时,会占用核2来处理A的线程。
刚才说的是只消耗CPU资源的程序,但这样的程序在实际应用中基本上是没有的,总会有跟资源打交道的。比如读个文件,查个数据库,访问一个网络连接等等。这个时候多线程才真正体现出优势,在一个进程中,线程a去读文件,线程b去查数据库,线程c去访问网络,a先用一下CPU,然后去读文件,此时CPU空闲,b就用一下,然后去查数据库,……,相对于读文件、查数据库、访问网络来说CPU计算的时间几乎可以忽略不计,所以多线程实际上是计算机多种资源的并行运用,跟CPU有几个核心是没什么关系的。
相关推荐
文章目录一、名词解释二、查看CPU信息参考文献未看完的参考文献 一、名词解释 CPU(Central Processing Unit): 中央处理单元, ...cpu核数: 每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU
近在项目里面使用了多线程处理技术,... 2.1对于内核数这个来做下自己的说明,当时自己在做的时候,查看了一些对于使用cpu核数的文章 有些高手做了一些性能方面的测试,表示当核数叫多的时候,处理性能提升很好,
CPU测试...多线程测试多核CPU的工具
并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu核数...
多线程 目录 进程 进程的了解 线程 什么是线程 线程的组成 线程的创建 线程的状态 线程的方法 线程的安全问题 1.进程 1.1.进程的了解 简单的来说进程就是运行中的程序,简称为进程。 单核CPU在任意一个时间节点上,...
CPU核数与线程数有什么关系?你管这破玩意叫mmap? 彻底理解零拷贝 操作系统与内核有什么区别?彻底理解树的递归遍历 CPU寄存器是如何装入结构体的? CPU可以跑多快?从地球到火星的距离告诉你回调函数实现的...
java多线程和多进程 以下内容包含:华东师范大学的多线程讲解 及 马士兵多线程讲解 马士兵多线程讲解迁移位置:仓库 DOCRecord\ResteasyComplexDemo\src\pers\lishbo\timetask 1.多进程: 1.当前的操作系统都是多...
我之前的文章中说过,大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统、环境都...
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep physical id| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep cpu ...
XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快编译速度。 2. 将Debug Information Format改为DWARF 在工程对应Target的Build...
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu...
线程的知识太多,知识点有深有浅,往深的研究会涉及操作系统、CPU、...严格意义上来说,同一时间可以并行运行的线程数取决于 CPU 的核数。 根据线程运行模式,可以把线程分为前台线程、后台线程和守护(Daemon)线程:
本书是我从学校图书馆下的,出版时间: 2009-3-1。看本书之前最好先看《多任务下的数据结构与...本部分介绍的各种并行算法和程序中,重点介绍如何解决多核系统中的计算随CPU核数的扩展性,CPU Cache伪共享方面的问题。
加快XCode的编译链接速度,XCode编译速度慢的解决方案 ...XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快编译速度
使用cordova开平台开发 代码亲测亲手写的 可用 验证就是手机CPU的核数 只是android的实现没有写ios平台 在研究插件的人可以看一下 有详细的注释
对于服务器的CPU,提出主结点服务器用多内核多线程的CPU;对于集群存储系统,提出将服务器应用软件存储与海量数据储存分离,服务器本机选用固态盘用于存储应用软件,海量数据存储系统采用网络接入存储和存储区域网络...
框架特性:1、支持依赖关系。2、多样化任务:可选择延时任务、IO任务。3、智能多线程异步:根据CPU核数控制线程池大小。4、自学习优先级能力:根据上一次启动的任务链耗时,计算本次启动每个任务的优先级
工作线程的数量建议设置到和cpu的核数一样。 9、编码方式: g++ -std=c++11 -o test test.c cppThreadWorkers.cpp -I./ -lpthread test.c:测试的c文件; cppThreadWorkers.cpp: 线程池源文件 cppThreadWorkers.h: ...
一个Vert.x有一个或多个事件循环线程组成,线程最大数量为主机有效的CPU核数。 Event Loop Vertical:事件的业务处理线程,存在于Event Loop中,用于处理非阻塞短任务。 Worker Vertical : 事件的业务处理线程,用于...
Concurrent scanning of data sources 工具介绍 这是一个并发扫描数据源(hbase,redis)的工具,多线程scan提高效率,但会... scan redis key不属于cpu密集型操作,线程池大小可以设置大一些(cpu核数的两倍)。 2.hbased