- 一、GIL 是什么GIL(Global Interpreter Lock,全局解释器锁) 是 CPython 解释器里的一把互斥锁:同一时刻,一个 Python 进程内只有一个线程能执行 Python 字节码。很多人的第一反应是“那多线程不就没用了?”——并不完全对。要理解 GIL 的影响,得先分清任务类型:CPU 密集型 和 I/O 密集型。 二、GIL 为什么存在CPython 用引用... 一、GIL 是什么GIL(Global Interpreter Lock,全局解释器锁) 是 CPython 解释器里的一把互斥锁:同一时刻,一个 Python 进程内只有一个线程能执行 Python 字节码。很多人的第一反应是“那多线程不就没用了?”——并不完全对。要理解 GIL 的影响,得先分清任务类型:CPU 密集型 和 I/O 密集型。 二、GIL 为什么存在CPython 用引用...
- 本文以一个并发批量检查网址状态的小工具为例,介绍 Go 语言的模块管理、goroutine 与 channel 的基本用法,并给出完整可运行代码和四个常见坑,帮助初学者快速写出第一个可靠的 Go 并发程序。 本文以一个并发批量检查网址状态的小工具为例,介绍 Go 语言的模块管理、goroutine 与 channel 的基本用法,并给出完整可运行代码和四个常见坑,帮助初学者快速写出第一个可靠的 Go 并发程序。
- JAVA多线程(5) 线程池 原理线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。重用存在的线程,减少对象创建销毁的开销,且提高了响应速度;有效的控制最大并发线程数,提高系统资源的使用率,同时避... JAVA多线程(5) 线程池 原理线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。重用存在的线程,减少对象创建销毁的开销,且提高了响应速度;有效的控制最大并发线程数,提高系统资源的使用率,同时避...
- JAVA多线程(4) 守护线程守护 (Daemon) 线程:运行在后台,为其他前台线程服务。也可以说守护线程是 JVM 中非守护线程的 “佣人”。一旦所有用户线程都结束运行,守护线程会随 JVM 一起结束工作。(GC垃圾回收线程就是一个经典的守护线程)应用场景:为其他线程提供服务支持、需要正常且立刻关闭某个线程时守护线程不能用于访问固有资源,比如读写操作或计算逻辑,因为它在任何时候甚至在一... JAVA多线程(4) 守护线程守护 (Daemon) 线程:运行在后台,为其他前台线程服务。也可以说守护线程是 JVM 中非守护线程的 “佣人”。一旦所有用户线程都结束运行,守护线程会随 JVM 一起结束工作。(GC垃圾回收线程就是一个经典的守护线程)应用场景:为其他线程提供服务支持、需要正常且立刻关闭某个线程时守护线程不能用于访问固有资源,比如读写操作或计算逻辑,因为它在任何时候甚至在一...
- JAVA多线程(3) 锁分类 是否锁同步资源(乐观锁、悲观锁)乐观锁:一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS... JAVA多线程(3) 锁分类 是否锁同步资源(乐观锁、悲观锁)乐观锁:一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS...
- JAVA多线程(2) synchronized 和 ReentrantLock 的区别synchronized是一个内置的Java关键字,ReentrantLock是一个类,实现了Lock接口synchronized会自动加锁或释放锁,ReentrantLock需要手动加锁和释放锁synchronized 无法判断获取锁的状态,ReentrantLock 可以判断是否获取到了锁synchr... JAVA多线程(2) synchronized 和 ReentrantLock 的区别synchronized是一个内置的Java关键字,ReentrantLock是一个类,实现了Lock接口synchronized会自动加锁或释放锁,ReentrantLock需要手动加锁和释放锁synchronized 无法判断获取锁的状态,ReentrantLock 可以判断是否获取到了锁synchr...
- JAVA多线程(1)优点:提高了程序的执行效率,一定情况下可以提高程序运行速度。缺点:可能出现内存泄漏、上下文切换、线程安全、死锁等问题。 并发编程三要素是什么?原子性:一个操作是不可分割的,要么全部执行成功要么全部执行失败。可见性:一个线程对共享变量的值进行修改后,另一个线程能够立刻看到修改的值。(synchronized,volatile)有序性:程序执行的顺序按照代码的先后顺序执行。... JAVA多线程(1)优点:提高了程序的执行效率,一定情况下可以提高程序运行速度。缺点:可能出现内存泄漏、上下文切换、线程安全、死锁等问题。 并发编程三要素是什么?原子性:一个操作是不可分割的,要么全部执行成功要么全部执行失败。可见性:一个线程对共享变量的值进行修改后,另一个线程能够立刻看到修改的值。(synchronized,volatile)有序性:程序执行的顺序按照代码的先后顺序执行。...
- 现在都是多核的高性能服务器,如果还一直单使用tar的话可就太捞了# yum install -y pigzOptions-b 设置压缩块大小(default 128k)-d 解压-k 不删除原始文件-I 输出压缩目录-p 最大使用线程数-q 不输出信息-r 递归-S 使用sss后缀替换gz-v 显示解压缩过程Example# tar --use-compress-program="pigz ... 现在都是多核的高性能服务器,如果还一直单使用tar的话可就太捞了# yum install -y pigzOptions-b 设置压缩块大小(default 128k)-d 解压-k 不删除原始文件-I 输出压缩目录-p 最大使用线程数-q 不输出信息-r 递归-S 使用sss后缀替换gz-v 显示解压缩过程Example# tar --use-compress-program="pigz ...
- 用 C 写一个线程安全的生产者-消费者队列:pthread + 互斥锁 + 条件变量写多线程程序时,最先遇到的往往不是算法,而是数据怎么在线程之间安全地传递。一个线程负责采集或计算,另一个线程负责落盘、发送或处理。如果两个线程直接读写同一个数组,很快就会遇到三类问题:数据还没写完就被读走、数组写满后覆盖了没处理的数据、队列为空时消费者只能空转轮询,白白烧 CPU。有界阻塞队列就是解决这个问... 用 C 写一个线程安全的生产者-消费者队列:pthread + 互斥锁 + 条件变量写多线程程序时,最先遇到的往往不是算法,而是数据怎么在线程之间安全地传递。一个线程负责采集或计算,另一个线程负责落盘、发送或处理。如果两个线程直接读写同一个数组,很快就会遇到三类问题:数据还没写完就被读走、数组写满后覆盖了没处理的数据、队列为空时消费者只能空转轮询,白白烧 CPU。有界阻塞队列就是解决这个问...
- 并发请求下日志容易因共享全局变量而串号。本文用 contextvars 保存 request_id,在 FastAPI 中间件中设置并写入响应头,配合日志过滤器输出,附可运行最小示例、运行方法与线程/后台任务边界。 并发请求下日志容易因共享全局变量而串号。本文用 contextvars 保存 request_id,在 FastAPI 中间件中设置并写入响应头,配合日志过滤器输出,附可运行最小示例、运行方法与线程/后台任务边界。
- 进程内接口限流常因并发竞争和时钟回拨出现超额放行。本文用惰性补充的令牌桶给出线程安全的最小 Python 实现,支持突发容量,并在拒绝时计算需等待秒数,附带并发验证与时钟回拨处理。 进程内接口限流常因并发竞争和时钟回拨出现超额放行。本文用惰性补充的令牌桶给出线程安全的最小 Python 实现,支持突发容量,并在拒绝时计算需等待秒数,附带并发验证与时钟回拨处理。
- 一句话结论:虚拟线程优化的是"等待",不是"执行"。 它把线程的内存成本从 MB 级压到 KB 级、把上下文切换从内核态挪到用户态,但它对 CPU 密集代码毫无帮助,还会被 synchronized 里的阻塞直接打回原形。 结论先说 | 场景 | 用不用虚拟线程 | 原因 | |---|---|---| | IO 密集(JDBC、HTTP 调用、Redis、文件) | ✅ 用 | 阻塞时让出... 一句话结论:虚拟线程优化的是"等待",不是"执行"。 它把线程的内存成本从 MB 级压到 KB 级、把上下文切换从内核态挪到用户态,但它对 CPU 密集代码毫无帮助,还会被 synchronized 里的阻塞直接打回原形。 结论先说 | 场景 | 用不用虚拟线程 | 原因 | |---|---|---| | IO 密集(JDBC、HTTP 调用、Redis、文件) | ✅ 用 | 阻塞时让出...
- 从 cmpxchg 讲到原子类与 LongAdder 的取舍。 从 cmpxchg 讲到原子类与 LongAdder 的取舍。
- Java 多线程入门:别再只会 new Thread 了多线程是 Java 里绕不开的话题。很多新手写并发代码时,第一反应就是 new Thread(() -> doSomething()).start(),看起来简单直接,但实际开发中这么写隐患不少。今天就来聊聊 Java 多线程的正确打开方式。 为什么不建议直接 new Thread?资源不可控:每次 new 都创建一个新线程,线程创建... Java 多线程入门:别再只会 new Thread 了多线程是 Java 里绕不开的话题。很多新手写并发代码时,第一反应就是 new Thread(() -> doSomething()).start(),看起来简单直接,但实际开发中这么写隐患不少。今天就来聊聊 Java 多线程的正确打开方式。 为什么不建议直接 new Thread?资源不可控:每次 new 都创建一个新线程,线程创建...
- 在 HarmonyOS NEXT 的原生应用开发中,随着业务场景从单一的移动端走向全场景分布式多端协同,应用内对复杂计算、大数据解析以及实时渲染的性能要求达到了前所未有的高度。传统的单线程 UI 模型在面对高负载异步任务时,极易造成主线程卡顿(Jank),从而严重影响用户的交互流畅度。本文将聚焦于 HarmonyOS NEXT 中的多线程并发核心机制,深度剖析如何利用 TaskPool(任务... 在 HarmonyOS NEXT 的原生应用开发中,随着业务场景从单一的移动端走向全场景分布式多端协同,应用内对复杂计算、大数据解析以及实时渲染的性能要求达到了前所未有的高度。传统的单线程 UI 模型在面对高负载异步任务时,极易造成主线程卡顿(Jank),从而严重影响用户的交互流畅度。本文将聚焦于 HarmonyOS NEXT 中的多线程并发核心机制,深度剖析如何利用 TaskPool(任务...
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签