- 想通了一件事情 # 前情提要 1.通过了解浏览器线程的一些知识我们知道浏览器进程中GUI线程是与JS引擎线程互斥的。 2.小程序的架构是JsCore执行js逻辑代码+webview页面渲染双线程,两个线程并不互斥。 # 那么问题来了 为什么浏览器中js代码会阻塞页面渲染而小程序环境里面JS却可以和页面渲染同时进行。 *GUI线程被设计成是和JS引擎线程互斥... 想通了一件事情 # 前情提要 1.通过了解浏览器线程的一些知识我们知道浏览器进程中GUI线程是与JS引擎线程互斥的。 2.小程序的架构是JsCore执行js逻辑代码+webview页面渲染双线程,两个线程并不互斥。 # 那么问题来了 为什么浏览器中js代码会阻塞页面渲染而小程序环境里面JS却可以和页面渲染同时进行。 *GUI线程被设计成是和JS引擎线程互斥...
- 面试题 开启一个线程死循环执行任务,一bool类型标识控制循环的退出,默认为true代表执行,一段时间后主线程将这个变量设置为了false。 若该变量未被volatile修饰,子线程还能退出吗? 原理 volatile的问题:可见性问题和禁止指令重排序优化。 可见性问题:本质上是CPU缓存失效,必须从主内存读取数据; 禁止指令重排序优化:x86处理器仅下,只实... 面试题 开启一个线程死循环执行任务,一bool类型标识控制循环的退出,默认为true代表执行,一段时间后主线程将这个变量设置为了false。 若该变量未被volatile修饰,子线程还能退出吗? 原理 volatile的问题:可见性问题和禁止指令重排序优化。 可见性问题:本质上是CPU缓存失效,必须从主内存读取数据; 禁止指令重排序优化:x86处理器仅下,只实...
- 了解读写锁吗? 互联网的并发场景大多是读多写少。所以缓存技术使用普遍。JUC也提供了读写锁-ReadWriteLock。 那你说说什么是读写锁? 读写锁一般遵循以下设计原则: 允许多个线程同时读共享变量只允许一个线程写共享变量如果一个写线程正在执行写操作,此时禁止读线程读共享变量。 知道读写锁与互斥锁的区别吗? 读写锁允许多... 了解读写锁吗? 互联网的并发场景大多是读多写少。所以缓存技术使用普遍。JUC也提供了读写锁-ReadWriteLock。 那你说说什么是读写锁? 读写锁一般遵循以下设计原则: 允许多个线程同时读共享变量只允许一个线程写共享变量如果一个写线程正在执行写操作,此时禁止读线程读共享变量。 知道读写锁与互斥锁的区别吗? 读写锁允许多...
- 我们自己的线程,如果写在main 方法,那就是 main 线程 在创建 NioEventLoopGroup(创建一组NioEventLoop) 的过程中就创建了 selector 这里因为我们当前线程其实是 main 线程,所以为 false 创建 ServerSocketChannel 初始化 server socket channel给 server sock... 我们自己的线程,如果写在main 方法,那就是 main 线程 在创建 NioEventLoopGroup(创建一组NioEventLoop) 的过程中就创建了 selector 这里因为我们当前线程其实是 main 线程,所以为 false 创建 ServerSocketChannel 初始化 server socket channel给 server sock...
- 1 消息积压问题追溯 系统某部分出现性能问题,来不及处理上游发的消息,导致消息积压。 消息积压是正常现象,积压越来越多就需要处理了。 就像一个水库,日常蓄水是正常的,但下游泄洪能力太差,导致水库水位一直不停的上涨,这个就不正常了。 2 积压的开发警示 防范于未然,平时使用MQ时,如何优化代码才能避免消息积压? 若线上已出现积压,如何处理最好? 3 性能优化 ... 1 消息积压问题追溯 系统某部分出现性能问题,来不及处理上游发的消息,导致消息积压。 消息积压是正常现象,积压越来越多就需要处理了。 就像一个水库,日常蓄水是正常的,但下游泄洪能力太差,导致水库水位一直不停的上涨,这个就不正常了。 2 积压的开发警示 防范于未然,平时使用MQ时,如何优化代码才能避免消息积压? 若线上已出现积压,如何处理最好? 3 性能优化 ...
- BIONIOAIOThread-Per-ConnectionReactorProactor 什么是Reactor Reactor是一种开发模式,模式的核心流程: 注册感兴趣的事件->扫描是否有感兴趣的事件发生->事件发生后做出相应的处理。 client/ServerSocketChannel/ServerSocketChannelOP_ACCEPTOP_... BIONIOAIOThread-Per-ConnectionReactorProactor 什么是Reactor Reactor是一种开发模式,模式的核心流程: 注册感兴趣的事件->扫描是否有感兴趣的事件发生->事件发生后做出相应的处理。 client/ServerSocketChannel/ServerSocketChannelOP_ACCEPTOP_...
- 但是仍然有些场景是不满⾜的,例如⼀ 个⽅法获取到锁之后,可能在⽅法内调这个⽅法此时就获取不到锁了。这个时候我们就需要把锁改进成可 重⼊锁了。 重⼊锁,指的是以线程为单位,当⼀个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,⽽其 他的线程是不可以的。可重⼊锁的意义在于防⽌死锁。 实现原理是通过为每个锁关联⼀个请求计数器和⼀个占有它的线程。当计数为 0 时,认为锁是... 但是仍然有些场景是不满⾜的,例如⼀ 个⽅法获取到锁之后,可能在⽅法内调这个⽅法此时就获取不到锁了。这个时候我们就需要把锁改进成可 重⼊锁了。 重⼊锁,指的是以线程为单位,当⼀个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,⽽其 他的线程是不可以的。可重⼊锁的意义在于防⽌死锁。 实现原理是通过为每个锁关联⼀个请求计数器和⼀个占有它的线程。当计数为 0 时,认为锁是...
- 前言 上一篇我们介绍Java内存模型来处理有序性,可见性的问题。但是,还有一个原子性的问题,没有处理,那么针对原子性的问题我们该怎么处理呢?我们知道在并发编程中的原子性问题主要原因就是,一条高级语句可能会被分成多个CPU指令,在指令执行完之后发生了线程切换,中间状态被暴露造成原子性问题。 锁 现实生活中,我们用自己的锁来保护自己的财产,买门票来锁定演唱会的座位。 ... 前言 上一篇我们介绍Java内存模型来处理有序性,可见性的问题。但是,还有一个原子性的问题,没有处理,那么针对原子性的问题我们该怎么处理呢?我们知道在并发编程中的原子性问题主要原因就是,一条高级语句可能会被分成多个CPU指令,在指令执行完之后发生了线程切换,中间状态被暴露造成原子性问题。 锁 现实生活中,我们用自己的锁来保护自己的财产,买门票来锁定演唱会的座位。 ...
- 前言 前面几篇文章,我们学习了synchronized的相关知识,以及死锁的发生条件以及避免的方式,其中有一种破坏死锁的方式就是破坏不可抢占条件,通过synchronzied不能实现的,因为synchronized在申请资源的时候,如果申请不到就只能进入阻塞状态,啥都干不了,也不能中断。所以只能通过本期的主角lock 来处理。 lock 与synchronized ... 前言 前面几篇文章,我们学习了synchronized的相关知识,以及死锁的发生条件以及避免的方式,其中有一种破坏死锁的方式就是破坏不可抢占条件,通过synchronzied不能实现的,因为synchronized在申请资源的时候,如果申请不到就只能进入阻塞状态,啥都干不了,也不能中断。所以只能通过本期的主角lock 来处理。 lock 与synchronized ...
- 文章首发于:Java并发编程(四)— 死锁的发生与避免 前言 上一篇我们介绍了如何通过synchronized 来加锁保护资源。但是,不当的加锁方式可能就会导致死锁。 死锁发生的场景 最典型的就是哲学家问题, 场景:5个哲学家,5跟筷子,5盘意大利面,大家围绕桌子而坐,进行思考与进食活动。 哲学家的活动描述: 哲学家除了吃面、还要思考、所以要么放下左右手筷子进... 文章首发于:Java并发编程(四)— 死锁的发生与避免 前言 上一篇我们介绍了如何通过synchronized 来加锁保护资源。但是,不当的加锁方式可能就会导致死锁。 死锁发生的场景 最典型的就是哲学家问题, 场景:5个哲学家,5跟筷子,5盘意大利面,大家围绕桌子而坐,进行思考与进食活动。 哲学家的活动描述: 哲学家除了吃面、还要思考、所以要么放下左右手筷子进...
- 文章目录 前言核心组件介绍线程组Http请求HTTP信息头管理器察看结果树聚合报告 固定定时器 总结 前言 我是码农飞哥,感谢您的阅读。众所周知,Jmeter是一款用来压测接口的利器。其组件比较多,可以应对各种场景下的压测需求。下面就让我们来认识一下这款利器。 核心组件介绍 组件名称组件作用组件添加方式线程组所有的测试计划都是以线程组为单位HTT... 文章目录 前言核心组件介绍线程组Http请求HTTP信息头管理器察看结果树聚合报告 固定定时器 总结 前言 我是码农飞哥,感谢您的阅读。众所周知,Jmeter是一款用来压测接口的利器。其组件比较多,可以应对各种场景下的压测需求。下面就让我们来认识一下这款利器。 核心组件介绍 组件名称组件作用组件添加方式线程组所有的测试计划都是以线程组为单位HTT...
- 原文链接:http://www.cnblogs.com/kismetv/p/8757260.html 前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性。 概述 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的... 原文链接:http://www.cnblogs.com/kismetv/p/8757260.html 前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性。 概述 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的...
- 前言 上一篇我们介绍了JVM06-经典垃圾收集器。这篇文章将介绍用来排查处理虚拟机故障的一些常用的命令行工具。因为如果我们要对JVM进行调优时,必须要通过这些工具分析虚拟机的运行状态。 jps: 虚拟机进程状况工具 jps命令是一个检查虚拟机进程状况的工具。它可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class)名称以及这些进程的本地虚拟机唯一... 前言 上一篇我们介绍了JVM06-经典垃圾收集器。这篇文章将介绍用来排查处理虚拟机故障的一些常用的命令行工具。因为如果我们要对JVM进行调优时,必须要通过这些工具分析虚拟机的运行状态。 jps: 虚拟机进程状况工具 jps命令是一个检查虚拟机进程状况的工具。它可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class)名称以及这些进程的本地虚拟机唯一...
- 单例模式,是我们最常用也最熟悉的一种设计模式,其使用要注意线程安全。 定义 单例模式:顾名思义,就是在应用中有且只有一个实例。一般类似于计数器类的都必须是单例,多例会导致计数结果不准。 一般而言,其分为饿汉式和懒汉式。 懒汉式 懒汉式:顾名思义,就是不在系统加载时创建类的实例。而是在调用时才去一次性创建。 demo如下: package com.singlet... 单例模式,是我们最常用也最熟悉的一种设计模式,其使用要注意线程安全。 定义 单例模式:顾名思义,就是在应用中有且只有一个实例。一般类似于计数器类的都必须是单例,多例会导致计数结果不准。 一般而言,其分为饿汉式和懒汉式。 懒汉式 懒汉式:顾名思义,就是不在系统加载时创建类的实例。而是在调用时才去一次性创建。 demo如下: package com.singlet...
- LinkedBlockingDeque的定义 LinkedBlockingDeque是一个通过链表实现的双端阻塞队列,如果不指定大小时,则默认的大小是Integer.MAX_VALUE,实现原理与LinedBlockingQueue类似。都是通过ReentrantLock+Condition+链表。 使用LinkedBlockingDeque 有哪些风险呢 在未来... LinkedBlockingDeque的定义 LinkedBlockingDeque是一个通过链表实现的双端阻塞队列,如果不指定大小时,则默认的大小是Integer.MAX_VALUE,实现原理与LinedBlockingQueue类似。都是通过ReentrantLock+Condition+链表。 使用LinkedBlockingDeque 有哪些风险呢 在未来...
上滑加载中
推荐直播
-
DeepSeek 深入浅出白话解读
2025/02/12 周三 17:00-18:00
Tim-华为云中国区AI解决方案总监
DeepSeek的来龙去脉,为什么DeepSeek那么强?哪些是它的领先优势?它是怎么发展过来的?在华为云上能不能用到DeepSeek?本节课将一一解读。
回顾中
热门标签