
并发
文章平均质量分 83
你的boy_Z
timianer
展开
-
线程数确定
线程数确定前言这篇文章主要介绍系统中线程数量怎么确定解决方案根据线程计算时间和等待时间Ncpu : 服务器cpu核心数量Ucpu: 服务器cpu的利用率W: 线程的等待时间(IO操作)C: 线程的计算时间Nthread : 系统理想化线程数量Nthread = Ncpu * Ucpu * (1+W/C);常规方案2*Ncpu 我觉得这里是认为线程等待时间等于线程计算时间TPS方案tps(transcationsPerSecond):也就是事务数/秒。它是软件测试结果的测量单位。一原创 2021-02-20 22:37:46 · 463 阅读 · 0 评论 -
LockSupport学习
LockSupport写在前面up在最近研究AQS源码时候发现,其最终使线程阻塞和唤醒的方法是利用了LockSupport.park/unpark方法,up之前还未接触过,所以些这篇文章来研究一下这两个api。源码分析我们先看一下LockSupport的park()方法:/*LockSupport.park*/ public static void park() { UNSAFE.park(false, 0L); }这个方法的作用阻碍当前线程获取cpu时钟(原创 2021-02-08 10:47:13 · 179 阅读 · 0 评论 -
多线程衍生过程
多线程衍生过程一、多线程基础1、进程与线程的概念1.1 进程产生的背景最初的计算机只能接受一些特定的指令,用户每输入一个指令,计算机就做出一个操作。当用户在思考或者输入时,计算机就在等待。这样效率非常低下,在很多时候,计算机都处在等待状态。批处理操作系统后来有了批处理操作系统,把一系列需要操作的指令写下来,形成一个清单,一次性交给计算机。用户将多个需要执行的程序写在磁带上,然后交由计算机去读取并逐个执行这些程序,并将输出结果写在另一个磁带上。批处理操作系统在一定程度上提高了计算机的效率,但是由原创 2021-02-08 10:05:17 · 254 阅读 · 0 评论 -
ReentrantLock到AQS
ReentrantLock到AQS写在前面上一篇讲了Synchronized的原理,这篇讲一下另一个锁ReentrantLock和它的基石AQS。Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS原创 2021-02-07 18:59:30 · 222 阅读 · 0 评论 -
Synchronized原理
Synchronized原理前言本文针对java互斥锁synchronized关键字的底层原理进行描述。为什么需要锁?锁存在于并发的场景,并发场景存在什么问题? 前提是并发场景存在一个多线程争夺的资源,该资源可以同时被多个线程获取到,但是这样会产生问题。比如 这个资源是一个数字1,现在多个线程的任务都是将这个数字累加。A线程先拿到数字1,这时候累加未结束,B线程又去拿到了A,那么B运行之后数字不是3而是2。这就产生了问题。那么怎么解决? 一 让这个数字的变化再所以线程中共享,也就是可见性,二、保证原创 2021-02-03 20:44:58 · 254 阅读 · 0 评论 -
最全面解析的线程池的实现原理
线程池的实现原理以及业务中的实践一个体面人的技术之旅。一 、写在前面1.1 线程池是什么?线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销(java线程对应操作系统的线程,创建线程需要切换用户状态,和占用内存等资源,而其大部分操作系统都会限制系统中的最大线程数量)、调度线程的开销(涉及到线程挂起和恢复,挂起需要记录线程状态)等等,同时也降低了计算机的整体性能。*用户态和内核态切换的代价*原创 2020-11-30 13:56:10 · 1556 阅读 · 0 评论