- 博客(174)
- 收藏
- 关注
原创 reactor框架使用时,数据流请求流程
6. 因此,onNext的调用前,数据的准备可以在Subscription.request的方法逻辑中内部进行准备,当准备好了再调用onNext方法。如果是分批request的,也就是说CoreSubscriber.onSubscribe逻辑中是分批次调用Subscription.request(n),则每个批次的Subscription.request(n)中都可以等待数据好了再调用onNext方法。这个方法就是在reactor的subscribe的时候会调用到这里。中的数据也准备好为止。
2025-01-21 22:01:07
801
1
原创 reactor中的并发
分别代表并发的线程数和缓存大小。4. 相对应的cache/buffer/onBackpressureBuffer等操作符因为存在了cache,因此将热流变成了冷流。在reactor的演讲中,flatmap对于io类型的并发效果较好.因为groupby的缓存可能会用完导致hang住。因此这里有如下的可以考虑的优化方法。注意凡是参数中有prefetch的,都表示这个operator有对应大小的缓存。2. 增加flatmap中的concurrency和prefetch值。1. reactor中的并发有两种方式。
2025-01-05 13:32:23
443
原创 reactor的Hooks.enableAutomaticContextPropagation();不生效解决方案
2. 注意,要看idea是否将context-propagation引入了。我的idea就是不知道为什么,虽然pom中添加了这个maven,mvn clean install 也通过了,但是在idea中的三方库就是没有。3. 编写类继承ThreadLocalAccessor。这个编写类的内容在官方文档中没有,坑人。因此按照官方文档,是不可能得到预期结果的。1. pom中需要先增加如下的内容。
2025-01-04 21:17:46
478
原创 鼹鼠工作室的高效秘密
4. 对项目的对接方也要求具有1,2的能力。1高效的决策力是重要的。1. 我们工作获得成功的基础,是具有立即作出决定并付诸。面的东西减到最少数量,对整个工程,动员全部力量有计划。2. 另一个要求,是必须有一批人数很少但是特别。分阶段地完成,始终保持高昂的士气。3. 还有一点,就是把报告及书。有能力并且责任感很强的人员。
2025-01-04 10:19:42
117
原创 flux中的缓存
cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存,但是当下游消费者的处理速度比上游生产者慢时,上游生产的数据会被暂时存储在缓冲区中,防止丢失。Flux.interval 默认下游的consume速率不能低于produce的速率,否则直接报错。4. 注意默认带有无界缓冲区时,如果设置了onBackpressureBuffer(size)。有界会导致如果缓冲区不足以缓冲数据时,会报错。3. Flux.fromIterable 经过测试,应该也是属于无界缓冲区。
2025-01-01 14:54:13
594
原创 flux 冷热流的矛盾
sb2只接收到新数据,结合share的功能是将冷数据切换成热数据,似乎也证明了这里Flux.interval是冷数据。所以导致Flux.just流的定义会有矛盾的地方,本质原因是冷/热流包含两种特性。1. 如果从Flux.just在没有subscribe的时候,就获取数据这点来看,属于热的。Flux.just是被订阅时是从头开始全量发送给subscriber的。Flux.just获取到的数据是没有订阅时候就写入进去的。sb2的订阅依然可以从0开始,说明这个Flux.interval是个冷数据。
2025-01-01 12:46:03
244
原创 mongodb和Cassandra
mongodb的一致性问题:15.MongoDB的一致性(读关注与写关注)_mongo w选项-优快云博客孤儿节点问题:技术干货 | MongoDB 偶遇孤儿文档及处理方法-腾讯云开发者社区-腾讯云分片集群MongoDB迁移前清除孤儿文档由数据迁移至MongoDB导致的数据不一致问题及解决方案 | MongoDB中文社区Cassandra可调一致性的使用及原理_大数据_老任物联网杂谈_InfoQ写作社区
2024-12-25 17:42:31
570
原创 lstio的透明代理相关问题
因此,这也是listio的TPROXY模式支持Proxy Protocol的原因。从https://istio.io/latest/docs/setup/additional-setup/cni/可知IstioOperator下只有几个element。而不是用init初始化方式安装。看到,使用init方式初始化lstio的时候,是可以配置透明代理的模式是redirect还是tproxy的。但是如果当作loadbalance,或者其实是从loadbalance过来的,其实ip地址已经被lb给改掉了。
2024-12-22 16:44:05
497
原创 disruptor讲解
从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者、单消费者工作原理解析 - 小熊餐馆 - 博客园高性能队列——Disruptor - 美团技术团队
2024-12-01 21:46:06
113
原创 tcp的网络惊群问题
只需要在各个进程中, 独自的 监听指定的端口,当然在监听前,我们需要为监听 socket 指定 SO_REUSEPORT ,否则会报错啦。由于没有采用 fork 的形式,各个进程中的 accept socket fd 不一样,加之有新连接建立时,内核只会唤醒一个进程来 accept,并且保证唤醒的 均衡性,因此使用 epoll 监听读事件,就不会触发所有啦。但是,epoll并不是只处理accept事件,accept后续的读写事件都需要处理,还有定时或者信号事件。当读写事件发生时,应该通知哪个进程呢?
2024-11-19 19:30:22
423
原创 std::sync::Mutex 和 tokio::sync::Mutex 使用场景
std::sync::Mutex 和 tokio::sync::Mutex 使用场景不理解
2024-09-18 13:49:03
391
原创 httrack 工具使用
httrack "https://learn.lianglianglee.com" -O "./mywebsite" -r3 --mirror
2024-09-16 23:29:14
224
原创 .await 操作并不总是要求 Future 对象实现 Unpin,但如果一个 Future 对象没有 Unpin 特性,必须使用固定(Pin)的方式来安全地进行异步操作。
以下这段因为Sleep是!unpin的,而且Box<Sleep>不是!unpin的,因此必须用pin包付起来,否则无法通过编译。)的方式来安全地进行异步操作。特性,必须使用固定(
2024-09-07 00:16:54
167
原创 rust pin的使用
pin实现了DerefMut的trait,因此可以对可变引用自动调用as_mut,变成了Pin<&mut T>。因为存在DerefMut,所以其实Pin<Ptr>和&mut Pin<Ptr>都是可以自动调用as_mut的。但是,但是,注意,这里的pin的内容无法取出来,但是pin里面的值是可以随时set的。如果要在PhantomPinned的情况下,想进行修改pin内部的数据。timeout_fut是在一个loop循环中,因此这里必须是一个借用才可以。中讲解的pin的用法到底是咋回事。
2024-09-06 16:25:50
1211
1
原创 rust中的生命周期(三)
这段代码因为是tokio::task::spawn_blocking开启了多线程,多线程内部对s必须就是有所有权。那么这里tokio::task::spawn_blocking(move||{println!})有move还是不够的,因为这里是多个线程都有对s的所有权,所以这里必须P是copy和Clone都存在。然后这里move的时候,默认是走的Copy的trait。这里不加Clone和Copy的trait不行,但是如果自己实现Clone。又不会进入到方法内部,不了解原因。
2024-08-31 19:40:27
532
原创 await的使用
为什么 for k in sleep_futures.iter()不行,需要使用 for k in sleep_futures?
2024-08-31 14:02:40
180
原创 tokio::task::spawn_blocking和tokio::task::spawn 的区别
Tokio和Actor | Tokio学习笔记
2024-08-31 12:22:20
271
原创 rust单线程下异步代码的意义
单线程下,可以进行多个异步任务。然后这些异步任务可以是网络请求,这样达到单线层的最大利用化。sleep_ms的代码可以是网络请求。意义雷同于单核多线程的含义。
2024-08-30 17:06:52
509
原创 sort排序免忘记
3. dual-pivot quicksort 双基准快速排序 jdk使用的不稳定排序算法。2. pdgsort golang/最新1.21使用的算法/rust非稳定排序使用的算法。1. timesort rust 稳定排序/python使用的算法。
2024-08-26 15:27:00
337
原创 rust生命周期理解(二)
会报错的原因是,for v in hanlders内部的move的确已经将所有权进行转移。for循环获取的是真实的变量。又试图获取一个已经转移了的hanlers的所有权,所以报错。创建的线程可能会在主线程结束之后继续运行,这意味着这些捕获的引用必须具有。的生命周期,因此不存在生命周期的问题。生命周期,即它们需要在程序的整个生命周期内有效。关键字时,闭包会捕获其环境中的变量。在线程的生命周期内是有效的,因此编译可以成功。类型的值(所有权),而不是引用。使用了值的迭代,而不是引用。向量的一个短期引用,不符合。
2024-08-25 10:20:18
775
原创 rust的生命周期问题理解(一)
变成了对rc_clone的不可变借用。// 现在可以安全地修改 `rc_mut`,原始的 `rc` 和 `rc_clone` 不受影响。// 此时的引用计数为2,`make_mut` 会在需要修改时进行克隆。第9行是对a的不可变借用,第10行是对a的可变借用。这句话将对a进行不可变的借用。此行b是对a的一个可变借用。rc_mut是对rc_clone的可变借用。a和b都对应同一个区域有write的权限。原因是a和b变量都指向同一个内存区域。
2024-08-20 13:52:27
524
原创 gin框架传入的gin.context参数是池化的
统一入口,将*gin.Context转化为context.Background(),调用controller。将context作为参数传递,而不再使用*gin.Context作为参数。2. 实现了context接口,导致context.withvalue(*gin.context,key,value).并不会有编译错误。2. 但是gin.context又实现了context的接口。因此,可以当作context去使用。1. 池化导致了复用后的ctx将会将之前使用的ctx中的内容进行覆盖。
2024-08-05 18:39:02
434
原创 重温redis和mysql的数据一致性问题
一致性问题考虑两个方面:2. 大家讨论的前提需要达成一致:掘地三尺,搞定 Redis 与 MySQL 数据一致性问题 | 社区征文
2024-08-05 18:33:31
270
原创 monad理解
就是因为可以存在f*g*m 等等这种多层复合映射,而不是只有单一的f(x)这种单一映射。幺半群的三个特性,本质上就是为了可以有效的进行链式操作。同时结合律的特性保证了函数式程序的编译执行过程中,可以自主进行函数的优化结合进行性能优化。2. 将结果有变化的地方,用monad进行封装。每个学习monad的人都要写一份自己理解的monad。然后还是包括自己没人能看到自己在写啥,而且大部分写的还是错误的。只能封装成monad的形式,才能保证返回的是一个符合monad要求的对象,可以一直去链式调用。
2024-07-08 21:22:08
407
原创 网络相关知识
2. 但是数据到服务端的时候,可能有多个流的req都几乎同时解码成功作为http2的req(我猜可能也有情况是当前正在处理其他的流的req,当前的这些流放在缓冲队列中).此时,可以根据流依赖和权重值,在服务器端选择对应的高优先级的req进行rsp的响应。1. quic其实相比http2效率提升非常有限,重点关注的是最底层的网络慢的10%的用户,可能有较好的效果,例如在高速火车上,甚至quic因为需要逐条压缩,导致效率和速度还慢于http2。三. 何为http/2流优先级?一. quic 的深入理解。
2024-06-24 02:00:34
492
原创 cpu漏洞修复
关于CPU相关漏洞的修复处理_cpu漏洞如何修复 vulnerability spec store bypass: vulnera-优快云博客
2024-06-21 15:43:28
249
原创 io_uring
应用线程通过mmap 机制更新SQ 来提交 SQE,以及监控 CQ 的完成状态,应用无需任何系统调用,就能提交和收割 I/O(submit and reap I/Os)。如果内核线程的空闲时间超过了用户的配置值,它会通知应用,然后进入 idle 状态。这种情况下,应用必须调用。如果 I/O 一直很繁忙,内核线程是不会 sleep 的。在日常的使用中一般建议选择后两种轮训模式,用户线程轮存在用户态到内核态的切换,相比内核轮询存在一定的性能损耗;内核轮询模式下,没有用户态和内核态的切换降低了损耗。
2024-06-21 10:23:22
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人