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. 创建操作/删除多行数据的UITableView的细节
  2. 论文解读|激光视觉融合的V-LOAM
  3. React Native 的图片加载方式
  4. CoreLink CCI-550的概念介绍
  5. Cannot find module 'rxjs/operators/share'
  6. 一文了解Linux 网络 I/O 模型
  7. linux分区 挂盘,linux分区与格式化磁盘挂载磁盘与自动挂载详细教程
  8. Epoll详解及源码分析
  9. 如何让不懂信息化的甲方客户看懂需求文档,并确认签字?
  10. java打印正三角形_java实现打印正三角的方法
  11. [转]Oracle字符串拼接的方法
  12. 怎么查看linux硬盘多路径,linux下磁盘多路径
  13. java开发 网关_SpringCloud系列之网关(Gateway)应用篇
  14. java.exe和javaw.exe有什么区别吗?
  15. 从一个面试官的角度谈谈产品经理怎么写简历
  16. 常见路由器配置NAT/UPNP/DMZ方法
  17. crm系统需要的服务器,灵当CRM管理系统运行环境-CRM服务器配置
  18. Oracle默认数据库角色账号密码
  19. 目标检测之CSK(Exploiting the Circulant Structure of Tracking-by-detection with Kernels)
  20. 计算机培训简报膜报,第二期计算机培训简报(第十二期)

热门文章

  1. 微信小程序设置请求超时wx.request等,简单易懂!
  2. 【虹科技术分享】ntopng是如何进行攻击者和受害者检测
  3. 洛谷P3384 - 树链剖分(树链剖分模板题)
  4. Kiwi Syslog服务器安装和配置
  5. [ubuntu]ubuntu18.04利用wine安装最新版本的微信
  6. 网站定位的创意与策划
  7. 怎么重启mysql_如何启动/停止/重启MySQL
  8. 微信里打不开链接?解决办法详解——VJump
  9. Java SSM框架后台搭建
  10. openmediavault安装OMV-Extras插件