单线程
使用单线程顺序执行任务
事件循环机制
为了在线程运行过程中,能接收并执行新的任务,引入事件循环机制(在循环语句中如果有新事件发生则触发运行)
//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;
}
}