java gil_为什么 Java 没有 GIL?
GIL 是个伪命题 ——初级程序员很容易被 80 年代的中文翻译过来的垃圾过时教程说,解决 concurrency 只能用多线程。然后就拿着多线程这个锤子到处找钉子。
其实这里要区分一个 IO 密集和 CPU 密集的,IO 密集,即便有 GIL 也可以通过 coroutine 或者 Fiber 很好解决,性能不低。
CPU 密集——这个得好好想一下。
如果只有一个核心,10 件事每个事要做 1 分钟,对于 CPU 密集任务,怎么用多线程都还是至少需要 10 分钟才能得到结果吧?多线程有毛用?
如果有多个核心,这就是 Python/Ruby 的问题了。只能用一个核心来处理任务。因为有 GIL。
所以 GIL 不是不能用多线程问题,而是多线程只能用单个核心的问题。但是实际上,大家也不是没见过 Chrome 啊,3D 游戏里只把一个核心占满的情况。这不就是只能利用一个核心的毛病么?为啥 GIL 就臭名昭著,而 C/C++ 大家就会很自然想到一个借口说你代码写得不好呢?
但是反过来说,你要用脚本语言解决计算密集问题?你 TM 逗我?计算性能问题,首先就得说 MRI/CPython 这个和 C 语言 30 倍性能差距的问题。。。。。。。。。。
就算没 GIL 的 Java 里,写多线程也不是个什么好体验。JVM 是不会卡进程,各种锁得你自己搞。搞得不好还是会卡进程。就算 C/C++ 直接用 pthreads,写起来是各种坑。
在实际应用中,GIL 给大家带来的不便是 0 。绝大多数市面上能看到的多线程教程,无论什么语言,都是用来解决 io wait 的问题的。 io wait 在 Ruby/Python 已经有 n 种解决方案了。
你如果写代码真碰到 GIL 问题了,请一定怀疑你的姿势不对。
自后还是要喷一下:为什么 nodejs 没有 GIL 问题?因为别人压根不支持多线程。(还不是活得好好的。)
java gil_为什么 Java 没有 GIL?相关推荐
- java 读取txt,java读取大文件
java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...
- JAVA基础(JAVA 执行环境) 第一天
JAVA程序有3中执行环境. (1)能够单独运行的程序,称为Java Application(Java应用程序). (2)在Internet浏览器中运行的程序,称为 Java Applet(JAVA小 ...
- java.utilDate和java.sql.Date
java.utilDate和java.sql.Date由广州疯狂软件教育java培训分享: java程序中的时间类型有java.util.Date和java.sql.Date两种.两者之间的关系和转化 ...
- java 终极超类,Java问答:终极父类(3),java问答
Java问答:终极父类(3),java问答Java问答:终极父类(上) Java问答:终极父类(下) Java问答:终极父类(2)-上篇 Java问答:终极父类(2)-下篇 在之前关于 Object ...
- java.lang.OutOfMemoryError: Java heap space错误及...
为什么80%的码农都做不了架构师?>>> 以下是从网上找到的关于堆空间溢出的错误解决办法: java.lang.OutOfMemoryError: Java heap spac ...
- 浅谈Java SE、Java EE、Java ME三者的区别
1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...
- java.lang.OutOfMemoryError: Java heap space的解决办法
如果在启动过程中出现内存溢出问题,抛出类似如下异常信息: java.lang.OutOfMemoryError: Java heap space 可以尝试办法: A.修改Tomcat/bin/cata ...
- Java接口和Java抽象类
Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...
- Java SE和Java EE应用的性能调优
凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态, ...
最新文章
- Set the roller speed
- 非常有趣的古越及吴语-台州话
- 新版本springboot-整合多数据源拆分思路
- AttributeError: 'NoneType' object has no attribute '__array_interface__'
- 高内聚低耦合_高渗透环氧树脂灌浆料
- 卡内基梅隆大学和斯坦福计算机,卡内基梅隆大学并列全美榜首的专业--计算机专业...
- android getter不起作用,java - 如何在Android Studio中自动生成getter和setter
- 地图中添加沿线文字标注
- 【BZOJ1483】【codevs2335】【hdu5997】梦幻布丁+加强版,LCA+主席树
- Java面试之JVM参数调优
- [原创]修改jquery.slideBox.js插件,自定义部分事件
- python爬虫学习(2) —— 爬一下ZOL壁纸
- 阿里云DataWorks介绍
- Zipf's law分析
- idea操作git时 合并分支+解决冲突
- 1 天卖 1.96 亿,知识付费浪潮下的喜马拉雅是如何做增长的
- poi setFontFamily设置微软雅黑有问题??
- JAVA毕业设计数字家谱管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
- 今天分享一个关于微商的套路。
- 全面解析视频编解码:原理、策略、实现
热门文章
- 由列车时刻查询系统想到的...
- 几乎0操作体验AI生成绘画,不能再小白了!#playgroundai
- Ubuntu详细安装教程(小白友好型)
- 蓝鲸智云-安装注意事项
- Spring原理(二)--循环依赖原理
- java字符转对象,Java将字符串转换为对象
- 苹果手机用android系统升级,iPhone手机提示系统升级,那到底该不该升级?极少人会这样做...
- 在给猫起名字这件事上,铲屎官们绝对是个鬼才!
- 算法学习 - 01背包问题(动态规划C++)
- 【Python】Python面向对象详解