单线程
使用单线程顺序执行任务
事件循环机制
为了在线程运行过程中,能接收并执行新的任务,引入事件循环机制(在循环语句中如果有新事件发生则触发运行)
//GetInput//等待用户从键盘输入一个数字,并返回该输入的数字int GetInput(){int input_number = 0;cout<<"请输入一个数:";cin>>input_number;return input_number;}//主线程(Main Thread)void MainThread(){for(;;){int first_num = GetInput();int second_num = GetInput();result_num = first_num + second_num;print("最终计算的值为:%d",result_num);}}
消息队列
为处理其他线程发送过来的任务,引入消息队列
- IO 线程将产生的新任务添加到消息队列中
- 渲染主线程循环获取消息队列头部中的任务
IO 线程
处理跨进程的任务:进程间的通信 IPC 来实现,通过 IO 线程来接收这些任务
微任务
为了处理新产生的高优先级的任务(解决实时性问题),引入微任务 消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列
setTimeout
为了支持定时器,引入延时队列
void ProcessTimerTask(){//从delayed_incoming_queue中取出已经到期的定时器任务//依次执行这些任务}TaskQueue task_queue;void ProcessTask();bool keep_running = true;void MainTherad(){for(;;){//执行消息队列中的任务Task task = task_queue.takeTask();ProcessTask(task);//执行延迟队列中的任务ProcessDelayTask()if(!keep_running) //如果设置了退出标志,那么直接退出线程循环break;}}
