首页
学习
活动
专区
工具
TVP
发布

杂谈

作者头像
平凡的学生族
发布2019-05-25 08:53:21
4590
发布2019-05-25 08:53:21
举报
文章被收录于专栏:后端技术后端技术

一点随笔,胡扯,有很多自己还没学习验证的地方。

redis与netty的reactor模式的体现?


  • netty工作机制如下:netty工作模型。 netty中,有bossGroup和workerGroup。
1. bossGroup中,每个线程维护一个包装的ServerSocket,监听一个端口。ServerSocket监听到新连接后,得到Socket并包装,并**注册**到workerGroup其中一个EventLoop所维护的selector上。每个workerGroup有多个EventLoop,每个EventLoop维护着一个Selector实例,类似单线程Reactor模式地工作着([参考](https://links.jianshu.com/go?to=https%3A%2F%2Fwww.cnblogs.com%2Fheavenhome%2Farticles%2F6554262.html)) 。
    2. workerGroup有多个线程通过多路复用监听读写事件。每个EventLoop都是一个单线程Reactor模型,不断循环 监听事件的发生->取出激活的socket->依次处理事件->监听事件的发生。redis中,由

epoll实现、事件处理、编程方式、LT ET

LT/ET

Level Triggered (LT) 水平触发

  • socket接收缓冲区不为空 有数据可读 读事件一直触发
  • socket发送缓冲区不满 可以继续写入数据 写事件一直触发

事件的触发是以缓冲区的空/满状态决定的,只要状态满足,就会触发。

java nio

既然如此,java的nio是水平触发吗?

我写了此文进行探究

  • Linux epoll的水平触发是以缓冲区空满状态来判断的。
  • 所以我觉得,验证java nio水平触发的办法是客户端写多个字节(比如1000个),服务端每次只读一两个字节,缓冲区一直没读完,处于非空状态。由于水平触发,读事件应当会触发多次,也就可以分多次读完消息了。 如果能多次触发读事件,就应当是水平触发

redis源码查看

ae.c/aeProcessEvents(其中包含文件事件分派器)为主的源码让我受益匪浅。该函数作用是完成事件处理的一次循环

ae_epoll.c/aeApiPoll函数讲述了redis如何用epoll实现事件监听

??

如何保证线程在切换到另一个CPU上运行之前,cache里的变量已经被写回内存?因为如果没写回内存,其它CPU的cache就会读到错误的数据。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis与netty的reactor模式的体现?
  • epoll实现、事件处理、编程方式、LT ET
  • java nio
  • redis源码查看
  • ??
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档