对go,kotlin,java的协程理解(瞎写,后面重新排版,先扯一些有的没的)
java对协程的支持最近才出,最低版本是jdk19,也就是虚拟线程。以前是没有的,这个得说起java的线程模型。
不同的操作系统,jvm的虚拟机的线程模型是不一样的。我们主要说linux和windows的,linux和windows的线程模型是1对1的。这个1对1对的是什么呢,对的是一个内核线程和一个用户线程。下面是一些小背景。
(内核线程(Kernel Levvel Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。其实程序一般不会直接使用内核线程,程序使用的是内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,轻量级进程也是属于用户线程。)
kotlin是沿用的java的这个线程模型,所以本质是没区别的。但是就是这个模式导致我们线程的操作需要频繁的在用户线程和系统线程中切换,很消耗资源,现在的模型大致是这样。
go就不一样,他是多对多的线程模型。他是一个GMP的模型(借鉴大佬的分析https://www.cnblogs.com/liumengchen-boke/p/14603926.html)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix