
思考题
综合各种知识, 分享一些思考
进击的小白程序员
java后端小白, 在学习中 语雀知识库: https://www.yuque.com/yuqueyonghu3pbfw8/hvcgpy
展开
-
提高cpu利用率, 一般采用多线程, 为什么不是多进程, 包括有线程池, 为什么不是进程池?
为什么父子进程通信开销大?进程通信的方式 有管道 消息队列 共享内存 即使是最方便的共享内存 也是在内核态开辟的空间 多个进程访问这个空间 需要进行内核态和用户态的切换以及资源的刷取。线程比进程更加轻量 而且一个进程的线程 共享资源 虽然有并发问题 可以采取 信号量 锁, 远比父子进程通信开销小 更容易 上下文切换资源的消耗 创建和销毁成本。原创 2024-08-25 09:58:22 · 183 阅读 · 0 评论 -
rocketmq 是参考了 kafka架构, 为什么rocketmq吞吐量是10万/秒, kafka吞吐量是17万/秒?
我们都知道, 为了防止消息在服务器丢失, 一般都是进行持久化(保存在磁盘), 在发送消失时那就涉及到从磁盘拷贝到内核空间, 从内核空间到用户态, 再从用户态到socket缓存区, 从socket缓存区到网卡 四次拷贝。总结:没有完美的架构, 很难做到既要, 又要, 牺牲一部分能力换取另一部分, 从而适应不同场景需求。而rocketmq使用的是零拷贝-mmp, 把内核态数据映射到用户态, 只减少一次拷贝,kafka使用的是零拷贝-sendfile, 把内核态数据发送到网卡, 减少两次拷贝,原创 2024-08-25 09:39:59 · 549 阅读 · 0 评论