计算机cpu,核心数,线程数之间的关系
CPU:物理上真实存在,是一块芯片,相当于人体的大脑,是计算机处理逻辑的中枢
核心数:物理上不存在,逻辑上存在,一块cpu可以分成多个核心数,一个核心数相当于一个人体的大脑,即核心相当于逻辑上的cpu
线程数:逻辑上存在,在同一时刻,允许同时处理事情的件数,相当于人脑的一心多用
原来的核心数与线程数的比例为1:1,但是随着超线程技术的兴起,现在技术可以实现1:2的关系,即一个核心能同时处理2件事情,现在能理解双核4线程的含义了吧。再补充一句,计算机上可以有多个CPU芯片。
计算机线程数和java线程数的关系
计算机多线程和java线程没什么直接的关系,例如,当计算机为双核4线程时,java同时开启了5个线程该怎么执行,这就涉及到了cpu的执行算法:时间轮询算法(下面会具体概述)。即同一时刻计算机为4线程,则能同时处理java中4个线程任务,而最后一个线程则处于等待状态,等待某一线程执行结束且cpu分配执行权给该java线程后,才能处理该线程
时间片轮转调度算法
时间片轮转调度算法是一种最简单,最古老,最公平且使用最广泛的算法。每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间。其实现的基本原理是:计算机将所有就绪的进程按照先来先服务(先进先出)的原则,排成一个队列,每次调度时,把cpu执行权分配给队首进程,并令其执行一个时间片,时间片的大小从几毫秒到几百毫秒,当时间片的时间用完时,由一个计时器发出中断请求,该进程将被剥夺执行权,并将其送往就绪队列的末尾;然后,再将cpu执行权分配给就绪进程队列的新的队首进程,重复上面的执行流程,这样的算法能保证就绪队列中所有进程在一给定的时间内,都能获取cpu的执行权。
补充
在cpu给定进程的执行权后,进程会将执行权给予该进程中就绪线程队列的队首线程,若在时间片的时间用完时,该线程也将送往就绪线程队列的末尾。
进程和线程
- 进程:程序运行资源分配最小单位,进程内部有多个线程,多个线程间共享
这个进程资源,如QQ,天猫网站等都是一个独立的进程 - 线程:cpu调度的最小单位,必须依赖于进程存在
并行与并发
- 并行:同一时刻,可以处理事情的能力
- 并发:与单位时间相关,在单位时间内能处理事情的能力,如并发量为每秒一千次点击,说明该系统操作能在1秒内同时处理一千次请求
并发编程的优缺点
- 优点:
能充分利用cpu资源,加快用户的响应时间
- 缺点
线程中的利用共享资源时,容易造成冲突
容易造成死锁
线程启动过多,上下文切有可能造成资源更大的浪费