大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
要理解Fibers首先需要对抢占式多任务和协作式多任务有所了解
- 抢占式多任务
抢占式是指暂停或中断正在执行的计算任务,而不是与其合作。中断后再继续恢复该任务的执行,这种改变又称为上下文切换。其缺点在于操作系统可能会在一个不适当的时间进行上下文切换。
例如:Linux的调度程序特权任务Scheduler
采用的就是取消进程任务,而不是与其合作。
- 协作式多任务
早期的多任务处理系统会自愿割让时间给另一个应用程序,这种方法有许多操作系统支持,被称为协作多任务处理。协作多任务依赖于线程,一旦停止则放弃控制权。其缺陷是编写拙劣的代码会堵塞整个系统。
例如:实时嵌入式系统往往采取协作多任务处理方式以获取真正的实时高性能。
什么是Fibers呢?
Fibers是一个轻量的线程,也称为绿色线程。
Fibers是一个可以在Linux等抢占式线程调度下执行协作多任务的Node.js线程库包。
Fibers是一个流程或应用级别的概念,并不对应操作系统的线程。
Fibers提供类似执行流的线程,当操作系统线程是抢占式调用时,开发人员可使用Fibers实现协作多任务。
Fibers的概念类似于协程coroutines
,执行时可以被程序暂停或继续。
进程VS线程VS协程VS纤程
在操作系统中,除了进程和线程外,还有一种较少应用的纤程Fiber
,又称为协程Coroutine
。Fiber常常拿来跟线程做对比,对于操作系统而言,它们都是轻量级的运行态。
通常认为Fiber比线程更加轻量开销更小,不同之处在于:Fiber是由线程或Fiber创建的,Fiber调度完全由用户代码控制。对系统内核而言,是一种非抢占式的调度方式。
Fiber实现了协作式多任务,而线程和进程则受内核调度,依照优先级实现抢占式的多任务。
系统内核是不知道Fiber的具体运行状态,Fiber的使用其实与操作系统是无关的。
Node.js中的Fibers
在Node.js中单线程是仅针对JavaScript而言的,其底层充斥着多线程。如果需要在JavaScript中实现多线程,常见的作法是编写C++的addon来绕过JavaScript的多线程机制。不过这种方法增加了开发调试的成本和难度。
Node.js中node-fibers
库为Node提供了纤程的功能,node-fibers
采用C语言编写。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/200770.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...