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?相关推荐

  1. java 读取txt,java读取大文件

    java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...

  2. JAVA基础(JAVA 执行环境) 第一天

    JAVA程序有3中执行环境. (1)能够单独运行的程序,称为Java Application(Java应用程序). (2)在Internet浏览器中运行的程序,称为 Java Applet(JAVA小 ...

  3. java.utilDate和java.sql.Date

    java.utilDate和java.sql.Date由广州疯狂软件教育java培训分享: java程序中的时间类型有java.util.Date和java.sql.Date两种.两者之间的关系和转化 ...

  4. java 终极超类,Java问答:终极父类(3),java问答

    Java问答:终极父类(3),java问答Java问答:终极父类(上) Java问答:终极父类(下) Java问答:终极父类(2)-上篇 Java问答:终极父类(2)-下篇 在之前关于 Object ...

  5. java.lang.OutOfMemoryError: Java heap space错误及...

    为什么80%的码农都做不了架构师?>>>    以下是从网上找到的关于堆空间溢出的错误解决办法: java.lang.OutOfMemoryError: Java heap spac ...

  6. 浅谈Java SE、Java EE、Java ME三者的区别

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  7. java.lang.OutOfMemoryError: Java heap space的解决办法

    如果在启动过程中出现内存溢出问题,抛出类似如下异常信息: java.lang.OutOfMemoryError: Java heap space 可以尝试办法: A.修改Tomcat/bin/cata ...

  8. Java接口和Java抽象类

    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...

  9. Java SE和Java EE应用的性能调优

    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态, ...

最新文章

  1. Set the roller speed
  2. 非常有趣的古越及吴语-台州话
  3. 新版本springboot-整合多数据源拆分思路
  4. AttributeError: 'NoneType' object has no attribute '__array_interface__'
  5. 高内聚低耦合_高渗透环氧树脂灌浆料
  6. 卡内基梅隆大学和斯坦福计算机,卡内基梅隆大学并列全美榜首的专业--计算机专业...
  7. android getter不起作用,java - 如何在Android Studio中自动生成getter和setter
  8. 地图中添加沿线文字标注
  9. 【BZOJ1483】【codevs2335】【hdu5997】梦幻布丁+加强版,LCA+主席树
  10. Java面试之JVM参数调优
  11. [原创]修改jquery.slideBox.js插件,自定义部分事件
  12. python爬虫学习(2) —— 爬一下ZOL壁纸
  13. 阿里云DataWorks介绍
  14. Zipf's law分析
  15. idea操作git时 合并分支+解决冲突
  16. 1 天卖 1.96 亿,知识付费浪潮下的喜马拉雅是如何做增长的
  17. poi setFontFamily设置微软雅黑有问题??
  18. JAVA毕业设计数字家谱管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
  19. 今天分享一个关于微商的套路。
  20. 全面解析视频编解码:原理、策略、实现

热门文章

  1. 由列车时刻查询系统想到的...
  2. 几乎0操作体验AI生成绘画,不能再小白了!#playgroundai
  3. Ubuntu详细安装教程(小白友好型)
  4. 蓝鲸智云-安装注意事项
  5. Spring原理(二)--循环依赖原理
  6. java字符转对象,Java将字符串转换为对象
  7. 苹果手机用android系统升级,iPhone手机提示系统升级,那到底该不该升级?极少人会这样做...
  8. 在给猫起名字这件事上,铲屎官们绝对是个鬼才!
  9. 算法学习 - 01背包问题(动态规划C++)
  10. 【Python】Python面向对象详解