模型之event loop

参考文献

Event Loop和Reactor模型的关系

Event Loop就是相当于Reactor模型中Reactor这个角色。

1. RunLoop是什么

RunLoop直译就是跑着的圈。基于RunLoop实现的线程之一直运行的,只不过在某个时间点可能被唤醒执行任务,任务执行完成后又休眠。RunLoop的存在就是保证当前线程一直执行而不退出。

2. RunLoop和线程的关系

  • 线程与RunLoop是一一对应的
  • 线程如果没有开启RunLoop, 任务执行完就会结束
  • 线程销毁了,RunLoop也会在线程结束时停止运行
  • 主线程的RunLoop是默认开启的,但是子线程的RunLoop需要手动开启。

总结一下:RunLoop和线程相辅相成,没有线程RunLoop会“死”;但是没有RunLoop,线程无法独“活”。

3. RunLoop结构图

RunLoop是在IOS下的一种模式的名称,该模式在js中叫做EventLoop,在Windows在叫做消息循环。因此RunLoop可以采用如下结构图表示:
在这里插入图片描述
上述结构中,主线程是一个Event_Loop结构,其工作线程worker同样也是一个Event_Loop结构。

RunLoop的伪代码如下所示:

int main(int argc char* agrv[]){
	do{
		Wakeup()
		DoSomeThins()
		Sleep()
		} wihle(!Quit())
}

4. windows下的消息循环

RunLoop这种模式在windows下称为消息循环。windows下的消息循环如下图所示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值