【一文通关】Java多线程基础(19)- 使用虚拟线程

257 阅读2分钟

虚拟线程

什么是虚拟线程

虚拟线程是轻量级的线程,它是一种虚拟的线程,并不是操作系统中真正的线程。

虚拟线程通常是在单个线程中模拟多个并发执行的线程,使用协程来实现线程切换。协程是一种轻量级的线程,可以在单个线程中执行多个任务,而无需进行线程切换。虚拟线程可以在应用程序内部实现线程调度,而不需要操作系统进行线程切换,因此可以更高效地利用系统资源。

既然定义里面提到了协程,那么稍微看看协程的概念。

协程

在抢占式调度中,操作系统内核会在某些条件下强制中断当前运行的进程或线程,并重新分配CPU时间片给其他进程或线程。而在协作式调度中,每个协程都必须在适当的时候显式地让出CPU时间片,以便其他协程可以运行。

在协作式调度中,调度器通常基于某些规则或调度算法,来判断哪个协程应该运行,并在适当的时候让出CPU时间片。例如,调度器可以在每个协程执行完一定数量的指令或等待一定的时间后,切换到下一个协程。

为什么要使用虚拟线程

使用虚拟线程,肯定是因为它有什么过人之处。

  • 更高效:虚拟线程比真实线程更小更轻量。
  • 提高资源利用率:真实线程被阻塞时,可以让其他虚拟线程运行。
  • 更低的上下文切换成本:虚拟线程间上下文切换比线程间更高效。

比如进行IO任务: 用户连接服务器启动一个线程,而在等待IO时该线程会被阻塞,而操作系统线程数量有限,对整个服务器系统很不利

而如果使用虚拟线程,则可以在等待IO时将虚拟线程挂起,而IO获得数据时又返回。

我目前的能力就是了解它的概念,以后学深入了再来补充