Java 线程池中的任务是否能算作是轻量级线程?

问答 蓝天 ⋅ 于 2019-07-01 17:52:03 ⋅ 最后回复由 青牛 2019-07-02 16:58:31 ⋅ 1912 阅读

Java线程池中的任务是否能算作是轻量级线程?又能否称之为协程呢?

基于这个问题我的思考是,首先任何执行指令都需要争抢到CPU资源才能执行,这是一切的前提,协程也不例外。

Java线程池中的任务和 goroutine 和内核线程都是 M:N 的,Java 线程池中的任务相对于内核线程而言,是不是更加轻量?类比来看,他和 goroutine 这种协程相比似乎没有本质的区别,我承认 goroutine 的调度更加先进,在陷入阻塞 I/O 操作时会使 G 和 P 解绑,从而不会浪费任何一个内核线程。但是本质上呢,我认为两者都属于用户态的“线程”,只是调度算法不同而已。或者希望有人能给出明确的定义边界,在此谢谢了!

成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2019-07-02 16:58:31

    本质是区别不大 但是goroutine会比java的线程强大和高效一些,Java的线程池模型通过全局锁来获取任务。而golang则把任务分成了两级,第一级是全局的可执行G队列,第二级是各个P独自战友的本地G队列,goroutine还有自己的调度算法和调度系统,但本质上都是通过逻辑映射来尽可能压榨cpu的资源

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter