Java线程模型

大家新年好。2018年的第一期来得晚了一些。因为年底有很多工作要做,加班多了一些,公众号停更了两周。

今天借着知乎上一个关于线程模型的问题,我正好可以讲一下Java的线程模型。

先来一段视频,带大家浏览一下JDK的源代码:

在早期的linux系统里,是没有线程支持的,操作系统分配资源的单位是进程,然后执行单元也是进程。说详细点就是,每个进程有自己的内存,文件描述符,IO端口等,你不能随便访问其他进程的资源,分配给你,就是你的了,别人看不到。而那时候的进程都是单线程的,所有的进程在同一个CPU上分时执行。

后来,使用并发程序提高程序的速度以后,一个进程做为一个执行单元就有些重了。这时就引入了线程的实现(线程的概念是很早的概念了,但在操作系统中真正地大规模使用比起概念的提出可能要晚了二十年左右)。在linux里,早期线程的实现,其实就是引入了个PCB(process control block),然后有个独立的栈。大家可以回忆一下fork的实现,copy_on_write,其实只要改一下,write的时候就直接write,别copy,这不就是新fork出来的一个process(这个时候比较混沌,讲不清楚是进程,还是线程,就用process代替吧)可以访问老的进程,这玩竟儿,有人叫它轻量级进程,有人叫它线程,总之是提高了整个系统的并发能力就是了。当然,后来线程机制做得越来越完善,并发控制,消息等都有了很好的支持,就是大家现在看到的样子了。

线程有自己的独立的栈,调度也依赖操作系统,但是大家还是不满意,觉得线程消耗资源太大了,例如在linux上,一个线程默认的栈大小是1M,创建几万个线程就压力山大。所以,后来在编程语言的层面上,就有了协程这个东西。

目前来说,编程语言里对协程支持最好的是go语言。协程使用栈内存是按需使用的,所以可以随随便便创建百万级的协程。而这些协程本质上还是要依托于具体的操作系统线程去执行的。比如说我创建了M个协程,然后在N个线程上执行,这就是M:N的方案。显然,Java里是没有协程的。当然,现在OpenJDK社区的 loom 项目正在努力为JDK增加协程。

这个项目是Ron Pressler主导的,他在加入Oracle之前,做了一个名为quasar的实现。也是很风骚的一种实现。大家有兴趣的可以下载来研究一下。

原文发布于微信公众号 - HinusWeekly(gh_4b8b4eda4e40)

原文发表时间:2018-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师学习

分布式锁的技术选型及思考锁和分布式锁总结参考

本文来自作者 一行 在 GitChat 分享的{分布式锁的技术选型及思考} 锁和分布式锁 在计算机中,锁的作用是解决在并发状态下的共享资源互斥问题,保证在...

32380
来自专栏Vue ssr

php,vue,vue-ssr 三版本页面对比Demo

目前我这边的web页面,都是采用php+smarty模板生成的,是一种比较早期的开发模式。好处是没有现阶段常用的前后端分离出现的首屏问题,因为其本身就是服务器渲...

48910
来自专栏重庆的技术分享区

创建一个微服务?首先回答这10个问题

原文地址:https://articles.microservices.com/creating-a-microservice-answer-these-10-...

31620
来自专栏云计算

微服务的模式 - 同步与异步

微服务是一种架构范例。在这种架构中,多个小型独立组件协同工作,从而构成一个系统。尽管它的操作复杂性较高,但这种范式已经被迅速采用。这是因为它有助于...

1.5K40
来自专栏北京马哥教育

大型网站的灵魂——性能

Via: http://blog.jobbole.com/84433/ 前言 在前一篇随笔《大型网站系统架构的演化》中,介绍了大型网站的演化过程,期间穿插了一...

35560
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 开发流程

过程介绍          AgileEAS.NET平台基于敏捷并行开发的一种实践,采用优秀先进的Microsoft .Net构件技术的插件式开发,AgileE...

258100
来自专栏CSDN技术头条

微博宕机背后,高并发有哪些常见问题?

上周,赵丽颖、冯绍峰结婚官宣造成微博宕机,那么回归技术,面对如此大的高并发流量和屡次崩溃的系统,作为程序员是否有较好的方法来应对及解决?在此,技术专家丁浪为我们...

43420
来自专栏EAWorld

微服务来了,配置怎么办?

配置管理是个简单的小话题,程序员都已经非常熟悉,咋就跟微服务挂上钩了呢? 前些年没提微服务架构的时候,大家也都会做配置管理相关的事情,比如我接触过的很多项目都做...

37760
来自专栏IT技术精选文摘

Go语言构建千万级在线的高并发消息推送系统实践

46820
来自专栏子勰随笔

SDK设计心得之架构和资源

65240

扫码关注云+社区

领取腾讯云代金券