对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)

  

  

 

posted @ 2023-02-22 11:18  lannoy  阅读(182)  评论(0)    收藏  举报