软考中级怎么复习学习,哔哩哔哩+刷题??1,要多久时间!@#¥123123123123123123123软考中级怎么复习学习,哔哩哔哩+刷题
下载软考通软件,刷几套往年真题就可以了
刷真题,两周
【相关推荐】
(题外话:作为前端程序员,我觉得这里老师讲的不是很准确,浏览器的线程分为GUI渲染线程-显示图片和文本、JavaScript引擎线程-解压缩、事件触发线程、定时触发线程、异步http请求线程-服务器数据)
显然这些线程需要共享这些资源,应当采用多线程,多线程是很有价值的。
(注意这里的“多线程“只限于用户级线程,而不是内核级线程。)
显然这里和核心就是如何实现Yield:
当两个线程共用一个栈时:
线程1:A、B
线程2:C、D
(Yield函数是右侧红色的代码,用来找到下一条指令)
(这里老师没有画错栈,是因为下面是高地址,就是栈顶)
两个线程共用一个栈,造成了程序错误。
因此我们必须使用两个线程+两个栈来处理:
Yield切换时也必须要切换栈。
如何保存线程的状态呢?TCB(Thread Control Block)
(红色长箭头表示CPU在执行哪一个线程)
线程1要使用esp=1000的栈,线程2要使用esp=2000的栈,因此我们需要在TCB中保存两个栈的esp
(对于栈的描述要使用栈帧,栈帧保存着esp和ebp,分别为栈顶指针和栈底指针,esp:extended stack pointer,ebp:extended base pointer)
使用两个栈时:
为什么说jmp语句可以不要:
因为Yield调用结束,上个线程正好是我们为了保存状态压栈了跳回的PC指针位置,当Yield函数调用结束后204立刻会出栈,所以不需要再jmp,这是多余的。