并发
文章平均质量分 50
王者之路001
解决问题才是王道!
展开
-
一个学习队列、生产者-消费者模式、多线程、同步的极佳的例子
3)多线程:线程是计算机中执行任务的最小单位(进程是拥有独立资源的最小单位)。线程sleep或停止会退出CPU。多线程之间会进行任务切换,这牵涉对进程的管理,以及对CPU资源的占用。4)同步:多线程之间同步,就是让任务取得一致。多线程同步,可以获得任务的一致性。多线程同步有多种机制,信号、临界区都是典型的机制。2)生产者-消费者模式:通过缓冲作为中间件,生产者发送数据,消费者读取数据;发现一个极佳的学习队列、生产者-消费者模式、多线程、同步(当然也有模板)的极佳的例子。1)队列:先进先出的表结构;原创 2023-02-20 18:38:11 · 206 阅读 · 0 评论 -
JAVA线程池的使用
线程池是另一种池化思想的运用,把线程放入池中进行管理。这种方法的好处是可以避免线程的创建、切换和销毁,因为这些过程非常耗资源。一般情况下,大厂都不建议工程师自己创建线程池,因为线程池创建很容易消耗大量内存。JAVA线程池的基本原理,其实就是对线程的生产者-消费者模型。JAVA线程池会确定核心线程数和最大线程数,来控制线程池的大小。如上图所示,右半部分是线程池的管理,而左半部分是任务的执行。JAVA线程池主要做的事情是对线程池的管理和任务的执行。其中,Task为相关线程。JAVA线程池就是这样的一种线程池。原创 2023-02-17 17:38:46 · 930 阅读 · 0 评论 -
支付宝DTS架构
最近,在忙着做一个任务,很奇怪发现后台的业务,付款和销账并不是在一个同一个事务里。按照我的理论,付款和销账这些属于数据库的业务,显然应该是在一个事务里,才能保证数据的一致性。与后台的负责人交流以后,告诉我付款和销账确实是两个过程。作为软件厂商,自己只能负责自己的事务一致性,但不能保证别的厂商提供的软件服务的一致性。这番陈述,似乎说服了我,但貌似并不是最好的解决方案。理论上,以上事务属于分布式事务。分布式事务,一般采用两阶段(2PC);即第一段提交完成,再进行第二段提交。但这种方式,会造成所有原创 2022-03-09 10:33:23 · 3770 阅读 · 0 评论 -
java.lang.OutOfMemoryError
近日,用Bugly追踪到一个奇怪的崩溃:# OkHttp Dispatcher(1604)java.lang.OutOfMemoryErrorpthread_create (1040KB stack) failed: Out of memory很奇怪,这个错误貌似不正常。大致猜测该问题原因为创建线程时的错误。继续研究,发现该问题主要在华为手机上,找出资料为“在Android7.0及以上的华为手机(EmotionUI_5.0及以上),这些手机的线程数限制都很小(应该是华为rom特意修改原创 2022-02-10 18:30:00 · 1471 阅读 · 0 评论 -
CountDownLatch的用法
今日试图解决一个问题,就是在Android中实现多线程同步,但要求几个变量同时同步。当时,首先想的是,一定得用Android或JAVA的本身机制。发现有个叫CountDownLatch的机制。CountDownLatch多线程同步类,可以协调多个线程之间的同步。CountDownLatch的典型用法如下:1)创建一个CountDownLatch实例,并确定需要等待的线程或任务数;2)一个线程或任务完成,CountDownLatch计数器减一;3)使用CountDownLatch.原创 2022-02-10 16:24:34 · 1693 阅读 · 0 评论 -
遇到了ANR错误
最近在解决一个Android问题。问题现象如下:手机进行上传的时候,任务太多,会报错误,甚至会提示“无响应,是否关闭”。显然,这是遇到了ANR错误,也就是Androdi手机无响应错误。这种错误的原因为:Android为了快速响应,把有关图形操作的相关任务,都放到了主线程;但如果主线程过分繁忙而没有响应,相关错误就会产生(When the UI thread of an Android app is blocked for too long, an "Application Not Respondin原创 2022-01-29 17:56:26 · 1661 阅读 · 0 评论 -
.NetCore Web改为单任务执行
以前,项目里有个.NetCore Web项目,为了效率,并没有采用单任务的方式。但经过测试以后,发现该功能存在如下问题:该任务可以接受多个响应,但假如会有多个需要串行化的任务,由于任务本身并不能保证任务得到串行化处理,从而造成任务处理状态错误。如果任务最终需要串行化处理,功能改为单任务,显然是必然的方法。于是,修改任务的步骤如下:1)添加[MethodImpl(MethodImplOptions.Synchronized)]方法2)增加互斥量作为同步方法。样例如下:public原创 2021-12-29 16:33:26 · 132 阅读 · 0 评论 -
Windows的进程生成是不是逐步增大的
我自己今天在做一个项目,需要不断生成新的同名进程,但需要抽时间把同名的老进程杀死。我的经验是:Windows的进程号是逐步增加的。但实际是不是逐步增加,我不能确定。于是,查资料,查到这个资料(https://devblogs.microsoft.com/oldnewthing/20210514-00/?p=105214):原文摘抄如下:Processes, commit, RAM, threads, and how high can you go?RaymondJanuary .原创 2021-05-17 18:42:27 · 213 阅读 · 0 评论 -
(转)C++11并发之std::thread
原文链接:https://www.cnblogs.com/lidabo/p/7852033.html本文概要:1、成员类型和成员函数。2、std::thread 构造函数。3、异步。4、多线程传递参数。5、join、detach。6、获取CPU核心个数。7、CPP原子变量与线程安全。8、lambda与多线程。9、时间等待相关问题。10、线程功能拓展...转载 2019-07-22 10:17:07 · 380 阅读 · 0 评论 -
golang同步机制之通道
1.通道是什么通道,在golang中的形式为类型为chan,是golang中同步的两个机制之一(另一个是WaitGroup)。chan的语法形式如下:ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .chan的类型可以是chan、chan<-、<-chan任意一种+数据类型(如i...原创 2019-06-21 16:18:08 · 566 阅读 · 0 评论 -
golang并发控制方法WaitGroup
1.WaitGroup的作用WaitGroup是Golang并发的两种方式之一,一个是Channel,另一个是WaitGroup。WaitGroup的API只有3个,非常简单好用,但是有各种坑。2.WaitGroup的用法WaitGroup有3个API:1)Add(delta int):增加/减少若干计数2)Done:减少 1 个计数,等价于 Add(-1)3)Wait:等...原创 2019-06-20 19:27:50 · 5474 阅读 · 0 评论