随笔分类 -  并发

一些并发的零碎知识
摘要:ReentrantReadWriteLock 概述 先带着问题去看这个类: 著作权归https://pdai.tech所有。 链接:https://www.pdai.tech/md/java/thread/java-thread-x-lock-ReentrantReadWriteLock.html 阅读全文
posted @ 2022-07-19 07:25 cutter_point 阅读(93) 评论(0) 推荐(0)
摘要:结果显示: 我们发现读取的a值杂乱无章,并不能保证是这个线程设置之后的值,为什么为这样呢??? 因为我们只对a进行上锁的话,那么在对a进行设置值的时候,其他线程可以继续读取a的值,当a的值设置完毕之后,其他线程读取的值,我们也不知道是读取那个线程设置的值 如果我们把a设置为数据库的值的话,我们会发现 阅读全文
posted @ 2019-11-28 12:09 cutter_point 阅读(342) 评论(0) 推荐(0)
摘要:国际惯例原理图 代码实现 到这里可能有的人不清楚怎么用,来我们测试一波 我们假设有100个用户同时请求,然后令牌恢复速率调成10,然后速率单位改为秒,也就是1秒恢复10个令牌 这样同时100个请求过来,马上令牌就会被用完,那么就会被限流,比如我们拦截器这个时候可以返回404,或者503 效果展示 阅读全文
posted @ 2019-06-21 14:31 cutter_point 阅读(667) 评论(0) 推荐(0)
摘要:这个就是一个消息可以被多次消费的范例了 其实这个实现的方式可以参考我之前的设计模式,观察者模式 https://www.cnblogs.com/cutter-point/p/5249780.html 不过有一点需要注意一下啊,这个消息发布的时候,好像是不支持字节数据的,里面好像会对字节进行转换,这样 阅读全文
posted @ 2019-06-12 17:43 cutter_point 阅读(482) 评论(0) 推荐(0)
摘要:顾名思义这个就是再消费的时候,不是之前的那哥用yield进行线程切换的操作,而是用线程等待阻塞的方式去执行,说实话我感觉效率不一定有之前那个好, 因为我对这种阻塞队列使用的时候,之前有发现阻塞队列,塞着塞着线程就会进入假死状态,这个很奇怪,但是有的时候又是好的,这个也不清楚到底是为什么 但是毕竟也是 阅读全文
posted @ 2019-06-12 17:37 cutter_point 阅读(3757) 评论(0) 推荐(0)
摘要:1、这是第一个简单的初始化版本,看起来比使用fqueue似乎更好用 消费 测试,这里我踩了个坑,切记每个线程最好先获取一次资源,也就是 结果: 阅读全文
posted @ 2019-06-12 10:50 cutter_point 阅读(2748) 评论(0) 推荐(0)
摘要:1.这里先要说一下为什么会想到fqueue,因为这个是一个轻量级的消息队列框架,并且速度很快,用起来很方便,就是这样 当然后期考虑使用redis,这里先上一个fqueue的版本,后面有时间我再吧他改成redis版本吧,感觉可能redis版本可能更适合 测试代码: 效果展示: 阅读全文
posted @ 2019-06-11 11:00 cutter_point 阅读(741) 评论(0) 推荐(0)
摘要:1.首先机器要求8核,不然可能会慢点 2.数据库建表的时候,最后建那种nologging类型的表,不然归档日志满了,数据库入库会很慢,甚至丢数据,因为数据量很大,我们不可能一次性提交所有数据,只能分批提交 业务逻辑实现接口类 一些辅助类,可要可不要,看业务逻辑 这里开始,我们实战使用这个方法解析入库 阅读全文
posted @ 2019-03-19 18:03 cutter_point 阅读(3557) 评论(2) 推荐(3)
摘要:最近有这样一个功能点,我实现了一个多线程的队列,生产线程ftp获取文件,然后扫描指定目录,获取文件基础信息,然后put进入队列,然后消费者通过这个信息解析文件进行入库,因为文件会比较多,所以到时候会起多个消费线程去解析数据,并且考虑到复用,不用的文件,消费消除要分化操作(策略模式),但是遇到一个问题 阅读全文
posted @ 2019-03-07 10:44 cutter_point 阅读(763) 评论(0) 推荐(0)
摘要:由于ringbuffer是一个环形的队列,那么生产者和消费者在遍历这个队列的时候,如何制衡呢? 1、生产快,消费慢,数据丢失? 生产者速度过快,导致一个对象还没消费完,就循环生产了一个新的对象要加入ringbuffer,导致消费不完整,造成数据丢失? 我们注意到,在我们获取生产者下一个位置的时候,是 阅读全文
posted @ 2018-03-04 15:57 cutter_point 阅读(1970) 评论(0) 推荐(0)
摘要:我们可以使用wait和notify分别对象线程进行阻塞或者唤醒,但是我们也可以使用LockSupport实现一样的功能,并且在实际使用的时候,个人感觉LockSupport会更加顺手 范例1,wait与notify 运行结果: 范例2,locksupport 效果展示: 两者相比我们就会发现, 1、 阅读全文
posted @ 2018-03-04 13:52 cutter_point 阅读(394) 评论(0) 推荐(0)
摘要:首先这个类的uml结构在disruptor中是这样的,里面只有部分的属性对象和函数内容,具体有什么作用,用到了再说,用不到我也不会。。。 1、那么这个对象有什么用呢? 注意我们这个类中有哪些属性: 我们在给disruptor添加消费事件对象的时候,disruptor会创建这个对象,在disrupto 阅读全文
posted @ 2018-03-01 22:54 cutter_point 阅读(618) 评论(0) 推荐(0)
摘要:对于volatile对象的原子更新 AtomicReferenceFieldUpdater这个对象进行原子更新的时候,外部操作对象只能是public,因为外部访问不到private对象,但是在内内部确可以自己封装一个compareAndSet 效果展示: 阅读全文
posted @ 2018-02-27 22:24 cutter_point 阅读(350) 评论(0) 推荐(0)
摘要:最近在看disruptor源码,在获取ringbuffer的下一个序列的时候,disruptor有几种等待策略,其中有YieldingWaitStrategy类,是使用java的Thread.yield();方法作为等待的方式,了解了一下 Yield不能保证使得当前正在运行的线程迅速转换到可运行的状 阅读全文
posted @ 2018-02-26 23:05 cutter_point 阅读(432) 评论(0) 推荐(0)