神秘使者到Java帝国传道协程,竟被轰了出去

神秘使者“久闻Java语言跨越平台 , 框架众多 , 不过二十年功夫 , 就已晋升天下第一编程语言 , 今日一见 , 果然名不虚传呐!”
“使者先生您过奖了 , 咱们快些走 , 国王陛下已经等候多时了”
今日 , Java帝国朝堂之上迎来了一位神秘的来宾 。
神秘使者到Java帝国传道协程,竟被轰了出去文章插图
来到大殿之上 , 只见国王正襟危坐 , 闭目养神 , 不怒自威 , 堂下群臣咸集 , 纷纷侧目 。
“来者何人?” , 国王一旁的内侍问到 。
“我乃GoLang帝国使者——Goroutine” , 使者答道 。
神秘使者到Java帝国传道协程,竟被轰了出去文章插图
“GoLang帝国?何方番邦小国?寡人竟从未听闻” , 国王闭眼说到 。
说罢 , 群臣皆笑了起来 。
“来此所为何事?” , 内侍继续问到 。
使者回答:“我此行特为传道而来”
说完 , 国王睁开了眼睛 , “传道?我Java帝国乃天下第一编程帝国 , 只有我们传出去 , 哪有学别人之道?”
使者不卑不亢 , 说到:“Java帝国虽如日中天 , 但却有一处缺陷 , 假以时日 , 必成大患”
“哦 , 你倒是说说看 , 如若言语不通 , 即刻轰出殿去 。 ” , 国王厉声喝到 。
“敢问陛下 , Java线程执行到阻塞函数时 , 该当如何?” , 使者问到 。
一旁的线程大臣见状 , 上前说到:“遇到阻塞那自然要被操作系统挂起 , 切换到别的线程”
“敢问大人 , 线程切换是否需要成本?如果大量线程频繁切换 , 成本又当如何?” , 使者追问到 。
“你若关心这个问题 , 那就不用阻塞函数 , 通过异步回调来进行” , 线程大臣答道 。
使者嘴角上扬 , 微微一笑 , “好一个异步回调!异步回调确实不用阻塞 , 不过它有两宗罪 , 其一:割裂了原来的代码业务逻辑 , 其二:陷入回调地狱难以维护”
神秘使者到Java帝国传道协程,竟被轰了出去文章插图
【神秘使者到Java帝国传道协程,竟被轰了出去】“这也不行 , 那也不行 , 你这人还真难伺候” , 线程大臣有些急了 。
使者转身面向国王说到:“启禀陛下 , 我有一法 , 可让线程遇到阻塞函数后不需切换线程 , 也不用异步回调还可以继续运行下去 , 是高并发开发神技”
国王一听来了兴趣:“哦 , 还有这种事?说来听听”
使者拜了一拜 , 说到:“线程可以在遇到阻塞的地方后 , 保存执行的上下文 , 转而去执行别处的代码 。 待阻塞的请求完成后 , 再转而回去继续执行”
神秘使者到Java帝国传道协程,竟被轰了出去文章插图
国王不解 , 问到:“什么叫转而去执行别处的代码?什么叫回去继续执行?这函数执行到一半还能中途退出再回来?”
“是的 , 没错!” , 使者回答 。
此话一出 , 朝堂上议论纷纷 , 群臣都露出了鄙夷的笑容 。
“简直荒谬!函数执行从进入到return退出 , 从来都是一气呵成 , 哪有中途执行一半退出 , 再回来接着执行的道理?简直闻所未闻!” , 一旁的线程大臣说到 。
使者继续说到:“一气呵成?恐怕不是吧?线程执行函数中途 , 遇到时间片用完或者遇到I/O阻塞 , 就会被操作系统保存上下文后挂起 , 切换到其他线程 。 而后等到机会再回过头继续执行 , 不是吗?”
神秘使者到Java帝国传道协程,竟被轰了出去文章插图
线程大臣怒斥道:“强词夺理!你说的这情况是操作系统在调度管理多个线程 , 对咱们的应用层线程来说都是透明的 , 无需关心”