什么是线程调度器(ThreadScheduler)和时间分片(TimeSlicing)?
线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦创建一个线程并启动它,它的执行便依赖于线程调度器的实现。
时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。
线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让的程序依赖于线程的优先级)。
什么是线程优先级,它在线程调度中的作用?
每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OSdependent)。
可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。
线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。
多核cpu是怎么线程调度的?
首先,感谢作者的邀请,希望能成为优质回答,如果觉得回答的还行,请关注我,嘻嘻...
计算机cpu与多线程
进程和线程:进程包含线程,一个进程中包含多个线程.线程是cpu调度和分配的基本单位,进程是操作系统进行资源分配(cpu,内存,硬盘io等)的最小单位.
单核cpu:实现多进程依靠于操作系统的进程调度算法,比如时间片轮转算法,比如有3个正在运行的程序(即三个进程),操作系统会让单核cpu轮流来运行这些进程,然后一个进程只运行2ms,这样看起来就像多个进程同时在运行,从而实现多进程.
多线程其实是最大限度的利用cpu资源.一个拥有两个线程的进程的执行时间可能比一个线程的进程执行两遍的时间还长一点,因为线程的切换也需要时间.即采用多线程可能不会提高程序的运行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间.
多核cpu:什么是多核cpu?多核cpu是一枚处理器中集成多个完整的计算引擎(内核).
多核cpu和单核cpu对于进程来说都是并发,并不是并行.
但是多核cpu每一个核心都可以独立执行一个线程,所以多核cpu可以真正实现多线程的并行.比如四核可以把线程1234分配给核心1234,如果还有线程567就要等待cpu的调度.线程1234属于并行;如果一会核心1停止执行线程1改为执行线程5,那线程15属于并发.
java多线程
JVM多线程与多核cpu:java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个线程又单独的有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交由线程处理(操作码+操作数).
由于Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令.所以多核cpu情况下多个线程会在多个核心上调度.
0
打个比喻:
假设1个CPU是一个人,
那么1个人一会喝水,一会又去打字。然后,喝水喝到一半,还没来得及咽下去,就伸手打一个字,还没打完,又停下来,咽口水下去。这就是多线程了。CPU切换速度快,看起来是一起运行的,实际上是不停 的切换。
多个cpu就相当于多个人,并行的话,打个比方,就像多个人一起去搬砖一样。
多线程并不是建立在有多少个CPU的基础上进行工作,多线程主要是通过CPU的时间片技术实现,比如在1S的时间内,在第一个0,1S处理一个线程的
工作,然后会储存好当前线程的工作状态,在下一个0.1S处理另一个线程的工作,每个时间都只能处理一个线程,只不过CPU的切换速度非常的快,
我们察觉不到而已,这其实是一种伪并行,而多核的CPU则是说我们每个核都可以单独的处理一个线程,这样的话处理速度自然就比单核的来说要快了

