链滴
社区愿景和功能特性
优雅的 Markdown 所见即所得编辑
快捷键交互
随时自由编辑分享内容
支持注销账号来去自由
分布式社区网络
开放 API
产品
Symphony 社区系统(Java)
Solo 博客系统(Java)
Vditor 编辑器(TypeScript)
思源笔记(Electron、Go)
Pipe 博客平台(Vue、Go)
发展计划表
发展简史
榜单
GitHub 仓库排行
帖子打赏排行
Solo 博客端排行
积分排行
活跃度排行
贡献排行
本站基于开源项目 Sym
编程代码问答
登录
注册
首页
>
标签
并发
75
引用 •
73
回帖 •
1
关注 •
428
浏览
参与讨论
关注
关注
分享
HashTable
2
引用
秒杀
8
引用 •
3
回帖 •
1
关注
并发编程
2
引用 •
6
回帖
面试
面试造航母,上班拧螺丝。多面试,少加班。
325
引用 •
1395
回帖
线程
122
引用 •
111
回帖 •
3
关注
CAS
13
引用 •
21
回帖
算法
428
引用 •
254
回帖 •
24
关注
默认
热议
好评
优选
最近回帖
关注者
查看所有标签
最好理解的 rust 线程池实现
简单并发实现 网上超级多类似代码,我也是学他们的。我总结了一下并运用了一点自己的理解,使代码运行逻辑看起来更加直观和好理解。随口一提,rust 语言圣经提到“编译器驱动编程”,这个观点我觉得很有趣,意思就是只要知识储备足够,就能先手写出来想要的函数名字,根据函数名字下面的波浪线提示把整个实际功能写出来。不得不说第一次学 ..
76
1 年前
1、创建线程的四种方式
创建线程的四种方式 本质上都是实现 Runnable 接口 1、继承 Thread 类 public class TestThread extends Thread{ public static void main(String[] args) { TestThr ..
80
1 年前
Atomic 原子类的使用及其原理
概述 Atomic,在化学中原子指的是不可分割的实体。同样的在并发体系中,原子类则是所有操作都具有原子性的,也就是说它的一个操作一旦开始,就不会被其他线程干扰。同时原子类是'并 java 并发体系'中,无锁方案的重要组成部分。 在之前的文章中--'并发知识梳理',这篇文章中我们提出了累加器问题: 当多个线程同时访问下边 ..
166
3 年前
线程池使用与原理
[图片] 概述 在大型项目中,在代码中直接创建线程是不允许的,如果需要使用多线性则必须通过线程池了创建,因而了解线程池的使用规范以及底层实现是非常有必要的。 使用 预想的用法 但说到线程池,我们可能首先会类比连接池这类池化资源,会以为线程池是通过 acquire() 来获取资源,通过 release() 来释放资源,就 ..
148
3 年前
synchronized 的原理及应用
[图片] 概述 在之前的一篇文章《'Java 内存模型及其原理' 》这篇文章中,曾经介绍过 synchronized 关键字的作用,解决的是多个线程之间访问资源的同步性,保证被 synchronized 修饰的代码具有原子性。因而在本篇文章将会深入了解 synchronized 的使用方式以及原理。 使用 synchr ..
163
3 年前
Java 内存模型及其原理
[图片] 概述 在《'Java 并发知识梳理'》这篇文章中曾说道:在并发领域由于可见性问题、原子性问题、有序性问题,从而会导致并发场景下,结果的不确定性,为了解决可见性和有序性导致的问题,Java 构建出了一套内存模型。因而本文就主要谈一谈 Java 内存模型的设计思路以及其原理。 从三个问题说起 缓存导致可见性问题 ..
132
3 年前
Java 并发知识梳理
[图片] 概述 随着摩尔定律逐步失效,cpu 单核性能达到瓶颈,并发逐渐逐渐得到广泛应用,因而学习了解以及使用并发就显得十分重要。但并发相关的知识比较琐碎,不易系统学习,因而本篇文章参照王宝令老师《Java 并发编程》来勾勒出一张“并发全景图”。 是什么? 用学术定义来说就是 并发:同一时间段,多个任务都在执行 (单位 ..
172
3 年前
I/O 与零拷贝
【整理】【原文:[http://www.52im.net/thread-3280-1-1.html 】 1、什么是 I/O? I/O 就是简单的数据 copy。 Q1:既然是 copy 数据,那么从哪里 copy 到哪里? 数据从外部设备 copy 到内存就是 Input, 数据从内存 copy 到外部设备就是 Out ..
122
3 年前
线程与线程池
1、CPU CPU 并不知道线程进程之类的概念 CPU 只知道两件事: 从内存中取出指令 执行指令,然后回到 1 [图片] Q1:CPU 从哪里取出指令? PC 寄存器(Program Counter),也就是程序计数器,可以把寄存器理解为存取速度更快的内存。 Q2:PC 寄存器中存放的是什么? 存放的是指 ..
101
3 年前
从生命周期的角度看线程和进程之间的异同
[图片] 概述 进程与线程想必都不陌生,两者有诸多相同点,甚至可以这样说,线程就是“轻量级的进程”。而且两者基本的五个状态也几乎一样,但进程和线程在状态切换时的触发条件却有诸多不同,因而本文从“生命周期”的角度去谈一谈两者之间的异同。 联系 就从状态本身而言,两者的状态类别和对应含义几乎是完全一致的分别为: 初始状态: ..
240
3 年前
30G 上亿数据的超大文件,如何快速导入生产环境?
Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前端时间接到一个真实的业务需求,将一个老系统历史数据通过线下文件的方式迁移到新的生产系统。 由于老板们已经敲定了新系统上线时间,所以只留给小黑哥一周的时间将历史数据导 ..
323
3 年前
go 语言中 for 循环的并发安全问题
hello,大家好,欢迎来到银之庭。我是 Z,一个普通的程序员。今天我们来看一个我在工作中刚发现的 go 语言里 for 循环的一个问题。 1. 结论 先说结论,用尽可能简练的语言描述就是:在 go 语言中,用 for 循环创建子协程,用 errgroup 管理这些协程,并会向子协程中传递参数的情况下,有可能产生并发安 ..
998
4 年前
从一百个到千万级并发情况下服务端的架构的演进过程
本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径 [图片] 基本概念 在介绍架构之前,为 ..
220
3 年前
ElasticSearch 实战之千万级 TPS 写入
***1. *** 背景 [图片] 前段时间,为了降低用户使用 ElasticSearch 的存储成本,我们做了数据的冷热分离。为了保持集群磁盘利用率不变,我们减少了热节点数量。ElasticSearch 集群开始出现写入瓶颈,节点产生大量的写入 rejected,大量从 kafka 同步的数据出现写入延迟。我们深入分 ..
565
4 年前
Synchronized 关键字解析
[图片] 总括 JVM 会通过 monitor 来进行加锁、解锁,从而保证有且仅有一个线程能够执行指定的代码,从而保证线程的安全,同时还具有可重入和不可中断的性质。 简介 同步方法: 同步方法支持一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则该对象变量的所有读取或写入都是通过同步方法完成的 ..
141
4 年前
没想到,这么简单的线程池用法,深藏这么多坑
[图片] 又又又踩坑了 生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。 ps:对账系统详细实现方式:对账系统设计与实现 本以为又是渠道端搞事情,上去一排查才发现,所有下载任务都被阻塞了。再进一步排查源码,才发现自己一直用错了线程 ..
388
4 年前
寻找高并发处理最优方案
149
4 年前
【java 并发系列】非阻塞算法
[图片] 引言 我们知道在 java 中,在不止一个线程访问一个互斥变量的时候,所有的线程必须要使用同步,不然的话,可能会发生很多我们意想不到的情况,而我们常用的可能是互斥锁 synchronized,他强制实现线程间的互斥动作。synchronized 保证了程序的安全性,但我们也知道在并发的情况下,它也带来了频繁的 ..
334
4 年前
Java 并发编程之多线程基础
并发编程线程基础 1.1 什么是线程 此处先了解一下进程,线程是进程中的一个实体,线程本身是不会独立存在的。进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。 操作系统在分配资源时是把资源分配给进程的,但是 C ..
144
4 年前
Java 多线程并发第一步
多线程-执行屏障 最近在看 Java 多线程的内容,看到个有意思的[链接],看了多线程部分的一道简单的题。。。 嗯。。。果然是一点都不会。 看了别人的答案和解释,结合百度才算是明白答案。 1114.按序打印(这是原题) 难度:简单 我们提供了一个类: public class Foo { public void one ..
168
4 年前
多线程之线程池小纪
[图片] 关于我是线程池 并发总是离不开多线程,多线程的应用能够更好地帮助我们协调利用 CPU、Memory、Net、I/O 等系统资源。频繁的创建、销毁线程会浪费大量的系统资源,增加并发编程的风险。利用线程池可以实现类似主次线程隔离、定时执行、定时执行、周期执行等任务。作用包括: 利用线程池管理并复用线程、控制最大并 ..
118
4 年前
上哪里去找一个高并发的需求。。。
如题
232
4 年前
Thread.join() 的原理分析
[图片] 一、Thread.join()方法的作用 首先,说到 Thread.join()方法,如果我们了解过 java 并发知识的同学可能都知道,我们可以用 Thread.join()方法来控制线程的执行顺序,顾名思义也能知道,join 嘛,加入的意思,也就是让当前正在执行的线程等待,让加入的线程先执行完,然后唤醒当 ..
496
4 年前
Java 并发编程(五)线程池
[图片] 线程池顶级接口 Executor Executor 接口为线程池的顶级接口,其 executor() 方法接收一个 Runnable 实现类对象,定义了在使用线程池时,如何调用线程中的业务逻辑。 class DirectExecutor implements Executor { public void ..
126
4 年前
Java 并发编程(四)并发容器
[图片] 并发容器的引出: 售票问题 有 N 张火车票,每张票都有一个编号同时有 10 个窗口对外售票,请写一个模拟程序。 实现 1:使用 List-非原子性操作 public class TicketSeller1 { static List tickets = new ArrayList<>(); ..
100
4 年前
Java 并发编程(三)可重入锁 ReentrantLock
[图片] ReentrantLock 的使用 ReentrantLock 可以完全替代 synchronized,提供了一种更灵活的锁. ReenTrantLock 必须手动释放锁,为防止发生异常,必须将同步代码用 try 包裹起来,在 finally 代码块中释放锁. public class T { Reentra ..
153
4 年前
Java 并发编程(二)线程同步
[图片] synchronized 关键字 1、对某个对象加锁 public class T { private int count = 10; private final Object lock = new Object(); public void m() { synchronized (lock) { // 任何 ..
95
4 年前
Java 并发编程(一)多线程基础
[图片] 线程简介 学习多线程之前,我们先要了解几个关于多线程有关的概念。 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可 ..
131
4 年前
进程 Vs 线程、并发 Vs 并行
进程 Vs 线程、并发 Vs 并行 CPU 核心数跟线程数的关系? 对于一个 CPU,线程数 >=核心数 也就是说,一个核心最少可以对应一个线程,但通过超线程技术,一个 CPU 核心可以同时运行俩个线程。 线程数可等同于在某一时刻,CPU 并行执行任务的数量。 进程 Vs 线程 何为进程? 进程是一个具有独立功能 ..
237
4 年前
Java 线程池
线程池 为什么要用线程池 如果有大量的任务需要并发执行,但是每个任务只需要执行很短的时间就执行完成,这样就会频繁的创建-> 销毁线程,这样反而会浪费系统资源。 那么有没有一种办法可以让线程执行完一个任务后,不进行销毁而是转去执行其它未完成的任务,这样就可以实现线程复用,而不用频繁的创建销毁线程,把时间、资源都浪费 ..
107
5 年前
CAS 与 Auomic 原子类
CAS 与 Auomic 原子类 什么是原子操作? '原子操作(atomic operation)是不需要 synchronized',这是多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。 Ja ..
251
5 年前
Fork/Join 框架 & CountDownLatch 与 CyclicBarrier
Java 并发工具类 Fork/Join '分而治之' “分而治之”:就是将一个复杂的计算,按照设定的阈值分解成多个小计算,然后将各个小计算的计算结果进行汇总。 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时,即达到阈值以下)再将一个个小任务计算的结果进行 ..
291
5 年前