同步异步与阻塞非阻塞的区别(及一些名词的理解)

1. 同步异步及阻塞非阻塞

同步异步 主要关注的是消息同步机制(synchronous communication/ asynchronous communication)。
阻塞非阻塞 主要关注的是函数的调用方式。
同步: 调用函数把消息读出, 函数返回时得到消息内容
异步: 调用函数读取消息,并给他个回调方法,自己继续往下进行其他事情,该函数读取完消息后会调用回调方法处理消息。
阻塞:函数返回之前线程处于停止状态
非阻塞:函数立马返回
采集等前置程序里,将socket设置为非阻塞,然后利用epoll或者select, 实现的其实是同步非阻塞。

2. IO多路复用

IO指的是网络IO, 多路指的是多个TCP链接或者多个channel, 复用指复用一个或者少量线程, 串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。利用谁呢, select, poll,epoll都是干这个的。
不是IO多路复用是什么情况呢? 就是你写一个循环,挨个遍历每个socket是否可读或者可写,效率会比较低下。
用上IO多路复用是什么情况呢? 全部socket都注册到select中, 由select负责告诉你可不可写, 或者可不可读。(epoll更高效)
IO多路复用,也叫事件驱动模型,也就是Reactor模型。

3. 写时复制 copy on write

核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的(transparently)。
Copy On Write技术实现原理:
fork()之后,kernel把父进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向父进程。当父子进程都只读内存时,相安无事。当其中某个进程写内存时,CPU硬件检测到内存页是read-only的,于是触发页异常中断(page-fault),陷入kernel的一个中断例程。中断例程中,kernel就会把触发的异常的页复制一份,于是父子进程各自持有独立的一份。
redis中用到的cow参见博文《 写时复制(Copy On Write)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值