多线程编程指南

     

Java 中使用 wait、notify、notifyAll快速指南

194 11K

首先,你永远不应该直接使用wait, notify, 或notifyAll(除非你有充分的理由)。如果您需要执行多线程操作,请使用并发库。使用 wait/notify/notifyAll 构建生产者/.

为什么在Rust中实现异步代码是特别困难?

303 3K

使用异步 Rust 比 Go(goroutine)或线程要困难得多:举个例子,假设我们需要在 Web 服务中运行一些 cpu 密集型操作(假设线程阻塞 3 秒)。异步 Rust 与 Tokio 会阻塞.

面试题:进程和线程有什么区别?

151

热门面试问题:流程和线程有什么区别?为了更好地理解这个问题,我们先来看看什么是程序。程序是包含一组指令的可执行文件,被动地存储在磁盘上。一个程序可以有多个进程。例如,Chrome 浏览器会为每个标签页.

C++ 协程的缺点

407 14K

这篇博文旨在强调将代码库转向协程(例程)所带来的一些风险,我相信持续不良的协程使用可能会导致更不安全和更慢的程序。即使没有多线程,协程也应该像编写多线程代码一样受到怀疑,它仍然是异步的。普通函数和堆栈.

PostgreSQL正在考虑将基于进程的模型迁移到线程模型

342

PostgreSQL 在大型系统上的扩展性不佳,主要是因为基于进程的模型都消耗了资源。并非所有数据库都有这个问题,如果不进行某种重大的架构更改,PostgreSQL 就无法停止这个问题。Postgre.

使用Java虚拟线程时要避免的陷阱

538 4K

Java 虚拟线程是 JDK 19 提供的一项新功能。它有可能在减少内存消耗的基础上提高应用程序的可用性、吞吐量和代码质量。在本文中,让我们了解从 Java 平台线程切换到虚拟线程时应避免的陷阱:避免.

异步 Rust 如何工作?

1077 1 7K
Rust 有一个新兴的异步系统。如果你的应用程序 IO 很重,你应该简单地“使用异步”,一切都会高效地工作。您可以使用async fn,.await,让它在后台处理,而 CPU 会做一些有用的事情。然.

Rust 类型系统可以防止死锁吗?

491 4K

在您最意想不到的时候,死锁潜伏在每个角落。我们可以使用 Rust 类型系统在编译时避免它们吗?也就是说,在编译时能证明没有死锁吗?假设我们有两个互斥体(或互斥体,如果你喜欢的话)M1 和 M2。如果线.

使用JDK飞行记录器和一些SQL查找Java线程泄漏 - Gunnar Morling

669

配备 JDK Flight Recorder、JDK Mission Control 和 JFR Analytics,识别和修复 Java 应用程序中的线程泄漏正在成为一项相对简单的任务。分析可疑线程.

用虚拟线程编写Http服务器 - piot

953 3K

在本文中,您将学习如何使用 Java 创建 HTTP 服务器以及如何使用虚拟线程来处理传入的请求。我们将此解决方案与使用标准线程池的 HTTP 服务器进行比较。我们的测试将在大约 200 个并发请求的.

Java虚拟线程:异步编程之死

2821 4 14K
最近,虚拟线程的第二个预览版作为JEP 436的一部分发布。第一个预览版中引入的一些更改已经完成,我们离获得对虚拟线程的完全访问权又近了一步。在本文中,我们将尝试为您提供有关为什么 JVM 生态系统中.

Java线程stop等方法被弃用(Java SE 19 & JDK 19)

1437 6K

Java 中Thread 一些方法被弃用:stop, suspend, resume为什么被Thread.stop弃用?因为它本质上是不安全的。停止一个线程会导致它解锁它所锁定的所有监视器(当Thre.

Rust所有权与借用图示概念

1684 1 4K
Rust 中的所有权是什么?Rust没有垃圾收集器,您需要显式分配和释放内存空间。当涉及大型代码库时,这很快就会变得乏味和具有挑战性。传统上,有两种管理内存的基本方法: 第一个是垃圾收集器;它主要用于.

Java并发编程中双重检查锁漏洞

948 5K

单例模式在实际工作或面试中出现的频率更高,double-checked lock是单例常见实现:public class SimpleSingleton4 {    private static Si.

Java使用默认线程池的陷阱问题

944 2K

我们都知道JDK1.5之后提供了ThreadPoolExecutor类,可以用来自定义线程池。线程池有很多好处,比如: 减少资源消耗,避免频繁创建和销毁线程,可以直接复用已有线程。 提供速度,任务来了.

Java并发编程Bug:ThreadLocal已用完但未清除

919 2K

在Java中,有许多技术可以确保线程安全。你可以使用synchronized和Lock等关键字来锁定代码块。但它们有一个共同的特点,那就是锁定会对代码的性能产生一定的损失。其实,JDK中还提供了另一种.

Java 18中启动Project Loom数百万线程

2518 1

在微服务时代的现代,我们与太多的服务进行通信以完成特定的工作。在这种情况下,线程大部分时间都处于阻塞状态。虽然现代操作系统有时可以处理数百万个打开的套接字,但我们无法打开许多通信通道,因为我们受到线程.

优步爆Go语言容易发生的数据并发争夺问题

1768 1 4K

Uber已经采用Golang(简称Go)作为开发微服务的主要编程语言。我们的Go monorepo由大约5000万行代码组成(还在增长),包含大约2100个独特的Go服务(还在增长)。Go使并发性成为.

JVM c1、c2 编译线程——CPU 消耗高?

1679 3K

c1, c2编译器线程是由Java虚拟机创建的,以优化你的应用程序的性能。偶尔,这些线程会倾向于消耗高CPU。在这篇文章中,让我们了解更多关于c1、c2编译器线程的情况,以及如何解决它们的高CPU消耗.

Java可扩展的读写锁 - puzpuzpuz

739

锁或互斥体(互斥)是最基本的并发原语之一。很难找到一个无法解释互斥锁的开发人员,至少在基本层面上是这样。然而,互斥锁远不止这些。他们可能是: 操作系统级(想想,一个 pthread 互斥锁)或用户级(.

Loom会造成CPU密集型线程的不公平调度

1265 1

Project Loom ( JEP 425 ) 可能是 Java 有史以来最受期待的新增功能之一。它对虚拟线程(或“绿色线程”)的实现保证了开发人员能够创建高度并发的应用程序,例如具有数十万个打开的.

多线程与Spring容器事务机制 - DZone

788 6K

Spring 负责所有底层事务管理细节,并为不同的事务 API 提供一致的编程模型,但有多少人真正了解它在多线程环境中的行为方式?是否可以在多个线程中打开事务并写入数据?让我们退一步思考一下Entit.

使用Loom创建虚拟线程 - david

1310 1 4K

在这篇文章中,我们展示如何使用Loom实现类似Go语言的绿色虚拟线程。Project loom 仍处于预览阶段,这意味着 api 可能随时更改。如果您想自己尝试这些示例,可使用Early-access.

Go最重要的特性是:隐形异步

1148 1 2K

当被问及 Go 最重要的特性时,许多人会谈论 Go 的简单性、C 互操作性、编译速度等。然而,Go 的最佳特性是在同步接口中编写异步代码的能力。作者给出了一个在 Go 与 Java 中发出的 HTTP.

Rust的async-await:协作调度 vs 抢占调度

1266

线程是为了并行化计算密集型任务。然而,如今,许多应用程序都是 I/O(输入/输出)密集型应用程序。这样,线程就有两个重大问题: 他们使用大量(与其他解决方案相比)内存 启动和上下文切换的成本可以在大量.

使用Chronicle Queue创建低延迟的TB级别的队列 - DZone

2791 1 4K

本文介绍如何使用开源 Chronicle Queue创建巨大的持久队列,同时保持可预测和一致的低延迟。在本文中,目标是维护来自市场数据馈送的对象队列(例如,在交易所交易的证券的最新价格)。也可以选择其.

Rust的并发线程 - ibraheem

1105 3K

下面是一个简单的 Web 服务器:use std::net::{TcpListener, TcpStream};use std::io::{BufRead, BufReader, Write};fn .

比较Java与Node.js的并发性和性能- maxant

3377 1 25K

想象一个简单的市场,对同一产品感兴趣的买家和卖家聚集在一起进行交易。对于市场上的每个产品,对该产品感兴趣的买家可以形成一个有序的队列,按照“先到先得”的原则进行排序。然后,每个买家可以接近最便宜的卖家.

Java“虚拟线程”被提交到JEP草案

1719 1

Java也终于要有纤程、绿色线程啦,虚拟线程能大幅减少编写、维护和观察高吞吐量并发应用程序的工作量,这些应用程序通过虚拟线程充分利用可用硬件,这是一种成本显着降低的轻量级用户模式线程实现。这是一个预览.

探讨Java中的多线程概念 - foojay

871 6K
解释Java编程语言中多线程的复杂性,让我们从快速概览和理解核心概念开始。 操作系统中的线程概念 线程:线程是轻量级进程,但它在多个方面与进程不同。线程的主要特征是它创建并发执行过程的感觉。它可以有效.