1,MFC堵塞网络函数不会把CPU时间浪费在阻塞上不会浪费CPU时间,所谓阻塞,是指条件未满足的情况下,把任务挂起,等到条件满足 。在阻塞期间,CPU啥事也没做 。但由于函数没有返回,这个线程中的所有任务都被挂起来了 。所以如果界面代码也在这个线程中,那么界面也就失去了响应 。
2,spinlock等待时释放cpu吗spin lock一般翻译为自旋锁,简单的理解是这样的,它和信号量差不多 。信号量:线程在无信号时会阻塞,阻塞时会释放CPU , 让其它线程用 。自旋锁:自旋锁在得不到锁的状态下也会阻塞,但阻塞时不释放CPU,一直占用CPU,相当于在死循环 。虽然我很聪明,但这么说真的难到我了
3,线程进入阻塞时线程会不会让出CPU那要看操作系统context switch的机制 。一般windows linux ios都会给定每个线程指定的执行时间,如果时间到了会出现计时器中断信号(timer interrupt signal),而线程会被动丢失CPU的使用权 。而有些简单的嵌入式系统没有这个机制,context switch一般是要求线程主动放弃CPU使用权而交给kernel 。如果这时候当前线程被阻塞那就会导致死循环 , 这时候要主动的叫reschedule 或者 yield等函数给kernel发信号 。当然有timer的系统也可以叫这些函数要当前线程提早主动放弃CPU资源从而避免在循环里等待浪费时间 。cpu不会休息的,依然工作 。线程让开cpu说明这个路是通的,所以是不会让的 。二者属于僵持状态 。【阻塞会释放cpu资源吗,MFC堵塞网络函数不会把CPU时间浪费在阻塞上】
4,阻塞与非阻塞哪个更耗cpu资源非阻塞并不是不断的轮询,否则和阻塞也没有什么区别 , 而是直接返回,让自己去处理请求不能满足的情况 , 就是自己看到没有位置给停车了,自己做决定是继续等待(循环非阻塞调用,当然没有必要 , 因为可以直接阻塞调用),还是去想别的办法停车 。至于占用的 cpu 资源应该相差不大,阻塞之后当前线程或进程放弃系统执行时间 , 直到条件满足,阻塞期间应该就是不会消耗太多资源,因为执行时间都不占用了 。而非阻塞就只是一个调用而已 , 不满足就直接返回到当前程序了,所以两个应该差不多的 。平时用非阻塞的时候应该就是希望程序自己处理请求不能满足的情况了,而阻塞则是程序只有满足条件才可以继续执行 , 所以就一直阻塞等待着了,那个用多用少看使用的情况而定了 。因为本身就是区别很明显的,功能并没交叉 。那要看操作系统context switch的机制 。一般windows linux ios都会给定每个线程指定的执行时间 , 如果时间到了会出现计时器中断信号(timer interrupt signal),而线程会被动丢失cpu的使用权 。而有些简单的嵌入式系统没有这个机制,context switch一般是要求线程主动放弃cpu使用权而交给kernel 。如果这时候当前线程被阻塞那就会导致死循环,这时候要主动的叫reschedule 或者 yield等函数给kernel发信号 。当然有timer的系统也可以叫这些函数要当前线程提早主动放弃cpu资源从而避免在循环里等待浪费时间 。5,操作系统中挂起和阻塞的区别操作系统中挂起和阻塞的区别如下:一:挂起是一种主动行为,因此恢复也应该要主动完成,而阻塞则是一种被动行为 , 是在等待事件或资源时任务的表现,你不知道他什么时候被阻塞(pend),也就不能确切 的知道他什么时候恢复阻塞 。而且挂起队列在操作系统里可以看成一个,而阻塞队列则是不同的事件或资源(如信号量)就有自己的队列;二:阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现 。挂起(suspend)不释放CPU,如果任务优先级高就永远轮不到其他任务运行,一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试;三:pend是task主动去等一个事件,或消息.suspend是直接悬挂task,以后这个task和你没任何关系,任何task间的通信或者同步都和这个suspended task没任何关系了,除非你resume task;四:任务调度是操作系统来实现的,任务调度时 , 直接忽略挂起状态的任务,但是会顾及处于pend下的任务,当pend下的任务等待的资源就绪后,就可以转为ready了 。ready只需要等待CPU时间 , 当然,任务调度也占用开销,但是不大,可以忽略 。可以这样理解 , 只要是挂起状态,操作系统就不在管理这个任务了;五:挂起是主动的,一般需要用挂起函数进行操作,若没有resume的动作,则此任务一直不会ready 。而阻塞是因为资源被其他任务抢占而处于休眠态 。两者的表现方式都是从就绪态里“清掉”,即对应标志位清零,只不过实现方式不一样 。挂起是人为的让进程暂停运行 。阻塞是指进程在运行过程中资源消耗完,同别的进程争夺资源发生死锁 。挂起释放CPU , 阻塞不释放CPU 。
- 炼乳营养丰富 吃炼乳会导致过敏吗
- redis订阅会阻塞吗 redis动态订阅
- 学编程多长时间能学会,问下 java 初级编程可以自学么需要多长时间能学会
- 怎样用指甲草染发
- 苹果每次发布会时间,新款苹果什么时候发布
- x1yoga,thinkpad x1 yoga集成显卡怎么样视频剪辑够用么玩lol的话fps会
- 葡萄干吃多了会有哪些危害
- k20,k20沈阳到北京的 这个火车怎么样会晚点吗
- 华硕w519l
- 只会EXL怎么做数据分析
