当前位置: 首页 > 科技观察

神秘使者前往爪哇帝国宣扬协程,却被踢出局!

时间:2023-03-21 19:42:17 科技观察

MysteriousMessenger》久闻Java语言跨平台,框架众多,短短20年,成为世界第一编程语言,今天看到,真是当之无愧它的名声!”“先生,我们走吧,国王陛下已经等候多时了。”今天,爪哇帝国的宫廷迎来了一位神秘的客人。来到大殿,只见大王正襟危坐,闭目养神,不怒自威,百官齐聚大殿,齐齐侧目。“谁在这儿?”国王身边的仆人问道。“我是GoLang帝国的使者——Goroutine”,使者回答道。“戈朗帝国?凡邦小国在哪?我怎么没听说过啊”国王闭上眼睛说道。说罢,众官皆笑。“你为什么在这?”佣人继续问道。使者回答:“我是来传教的。”说完,国王睁开了眼睛,“传教?我的Java帝国可是世界第一编程帝国,传教的就只有我们自己了,怎么跟别人学?”使者不卑不亢,说:“爪哇帝国虽然如日中天,但有一个缺陷,久而久之会成为一场大灾难。”“请问陛下,Java线程执行阻塞函数时,怎么办?”使者问道。见状,一旁的线程部长上前说道:“如果遇到阻塞,自然会被操作系统挂起,切换到另一个线程。”“敢问,线程切换有成本吗?如果大量线程频繁切换,成本如何?”使者问道。“如果你关心这个问题,那么你不需要阻塞函数,通过异步回调来完成,”线程部长回答道。使者嘴角上扬,微微一笑,“好一个异步回调!异步回调不需要阻塞,但是有两个罪过,一:割断了原有代码的业务逻辑,二:它是在回调地狱中很难维护。”,那不行,你真是难伺候。”丝线部长有些着急。使者转身面向国王说道:“陛下,我有办法让线程在遇到阻塞函数后,不用切换线程,不用异步回调,就可以继续运行,这可是高并发开发的神技啊。”有兴趣:“哦,有这种事?说说看。”使者躬身说道:“线程遇到阻塞的地方,可以保存执行上下文,在别处执行代码。阻塞的请求完成后,再回去继续执行。”国王不解地问道:“切换到执行其他代码是什么意思?回去继续执行是什么意思?这个函数可以执行到一半退出再回来?”“是的,没错!”使者回答道。此话一出,朝堂上议论纷纷,百官都露出鄙夷的笑容。“真是可笑!函数执行从入口到返回出口,从来都是一气呵成的,哪有理由执行到一半就退出,然后回来继续执行?闻所未闻!”一旁的线臣说道。使者接着说:“一口气搞定了?恐怕不行?线程执行函数中途,当时间片用完或者I/O阻塞时,就会被操作挂起系统保存上下文后,再切换到其他线程。然后等待机会再回去继续执行,是吗?线程部长骂道:“狂妄自大!你说的是操作系统在调度和管理多个线程,这些线程对我们应用层线程是透明的,我们不需要关心它们。”使者毫不退缩地问道:“既然操作系统可以调度和管理多个线程,为什么线程不能调度和管理函数的执行呢?”大臣们又窃窃私语起来,开始讨论起来。国家用他的谣言欺骗了群众,我建议你立即将他们赶出大厅,以便你看到真相!”国王同意了,并立即派人上前。不等侍卫靠近,使者独自离去,边走边说:“可惜了!强大的爪哇帝国容不下一项新技术。”使者在欢送会上心灰意冷,打算离开爪哇帝国,却在途中遇难。老爷请你到府上相见。我对这位先生提到的函数执行过程中可以中断和恢复的技术很感兴趣。还请诸位指教。”大师行礼。“我不敢教你,我这次是来Java帝国的,我教的方式叫协程,是高并发开发的噱头。但是你们国家的国王和大臣们都懵了,没有回头路。”成功了,可惜,可惜!”,使者感叹道,“协程?这是什么东西?我只听说过进程和线程,没听说过协程。”使者起身说:“线程是操作系统抽象出来的执行流,由操作系统统一调度和管理。在一个线程中,也可以抽象出多个执行流,由线程进行统一调度和管理。”这个线程上的抽象执行流是一个协程。”大师有些疑惑,问道:“一个线程怎么会有多个执行流程呢?”“这是我今天在法庭上说的,一个线程执行函数遇到阻塞后,可以保存上下文并退出,然后执行其他代码。这里我们从一个执行流开始,转移到另一个执行流,”该使者解释道。高手跳起来,“就是这个意思,妙,妙!可是,这个线程是由操作系统调度管理的,从线程中抽象出来的执行流程,也就是协程,怎么调度管理呢?运行系统可以通过时钟中断和系统调用进入内核剥夺线程的执行权,那么线程如何通过剥夺协程的执行权来实现调度管理呢?”这个问题问得好!线程的调度是由操作系统来管理的,抢占式调度。与协程不同的是,协程需要相互协作,主动交出执行权。这也是协程的名字——协程的由来合作项目。”.“有很多种方式,比如C++帝国有一个叫libco的协程框架,它通过HOOK关键系统函数来实现对调度器的干预。”“那你在Golang中是怎么做的?是一样的吗?”同样的,我们先天的设计就是支持协程,系统调用已经被我们封装了。当应用程序调用时,需要阻塞,比如文件读/写Read/Write,Sleep,我们的调度器会有机会介入,去Execute调度管理。”使者得意地说。主人想了想,问:“那Java应该怎么实现,请赐教?”“你的Java语言是通过JVM执行的,字节码的执行是在JVM的控制下。代码执行流程的中断和恢复不是很容易吗?”信使说。大师若有所思地点点头。新行主与使者谈笑风生,不知不觉,已近黄昏。”大师起身道:“今日受先生指点,平生大慰,请多留府中,好细问。使者连连摆手道:“我还有要事要做,明日便动身,我要走了。”“不知公子想去哪里?”“听说C++帝国要出新版本了,我打算前去布道。”大师露出疑惑:“C++帝国不是有libco吗?”“Libco终究不是王宫。”东西,这次我去,希望协程能被纳入新的官方标准。”第二天一早,使者告别了自己的主人,骑马离开了。很快,朝廷传来了消息。Java帝国有人推出了一个协程框架——Quasar,一时间震惊了朝野。转载本文请联系编程技术宇宙公众号。