网络io阻塞会占用cpu吗,c 被 socket 阻塞的线程 还占用CPU时间吗

1 , c 被 socket 阻塞的线程 还占用CPU时间吗肯定占用啊 。他一直在监听端口 。不断的循环占的很多 。网络流,端口资源,等等 。不用
2,网络io操作会消耗太多cpu吗这个你需要知道阻塞和非阻塞的区别,以及线程的状态切换,同步和异步更多的指的是消息的通知机制,操作指令装进内存,但是文件就在执行指令的时候才去读硬盘 。也就是不会装进内存 。【网络io阻塞会占用cpu吗,c 被 socket 阻塞的线程 还占用CPU时间吗】
3,线程进入阻塞时线程会不会让出CPU那要看操作系统context switch的机制 。一般windows linux ios都会给定每个线程指定的执行时间,如果时间到了会出现计时器中断信号(timer interrupt signal),而线程会被动丢失CPU的使用权 。而有些简单的嵌入式系统没有这个机制,context switch一般是要求线程主动放弃CPU使用权而交给kernel 。如果这时候当前线程被阻塞那就会导致死循环,这时候要主动的叫reschedule 或者 yield等函数给kernel发信号 。当然有timer的系统也可以叫这些函数要当前线程提早主动放弃CPU资源从而避免在循环里等待浪费时间 。cpu不会休息的,依然工作 。线程让开cpu说明这个路是通的,所以是不会让的 。二者属于僵持状态 。
4,利用socket读取接受数据时如何减少cpu利用率用io阻塞,就不会占用那么多cpu时间了while(true)int firstByte=is.read();//如果无数据可读,那么就会阻塞在这里,而不会引起循环的空转if(firstByte==-1)//结束break;int c=is.available();//读取接收到的数据长度byte[] buf=new byte[c+1];buf[0]=(byte)firstByte;is.read(buf,1,c);...后续省略}支持楼上的自己试试用线程池解决这个问题 is.available();//你的问题出在这里 。j2me没实现这个方法 。所以一直跳过去了 。学习中 问题的其他解决办法参考 :http://zhidao.baidu.com/question/41527308.html?a=6.712111922091&t=%c0%fb%d3%c3soc5,阻塞与非阻塞哪个更耗cpu资源非阻塞并不是不断的轮询,否则和阻塞也没有什么区别,而是直接返回,让自己去处理请求不能满足的情况 , 就是自己看到没有位置给停车了,自己做决定是继续等待(循环非阻塞调用,当然没有必要,因为可以直接阻塞调用),还是去想别的办法停车 。至于占用的 cpu 资源应该相差不大 , 阻塞之后当前线程或进程放弃系统执行时间,直到条件满足,阻塞期间应该就是不会消耗太多资源 , 因为执行时间都不占用了 。而非阻塞就只是一个调用而已,不满足就直接返回到当前程序了,所以两个应该差不多的 。平时用非阻塞的时候应该就是希望程序自己处理请求不能满足的情况了 , 而阻塞则是程序只有满足条件才可以继续执行,所以就一直阻塞等待着了 , 那个用多用少看使用的情况而定了 。因为本身就是区别很明显的,功能并没交叉 。那要看操作系统context switch的机制 。一般windows linux ios都会给定每个线程指定的执行时间 , 如果时间到了会出现计时器中断信号(timer interrupt signal),而线程会被动丢失cpu的使用权 。而有些简单的嵌入式系统没有这个机制,context switch一般是要求线程主动放弃cpu使用权而交给kernel 。如果这时候当前线程被阻塞那就会导致死循环 , 这时候要主动的叫reschedule 或者 yield等函数给kernel发信号 。当然有timer的系统也可以叫这些函数要当前线程提早主动放弃cpu资源从而避免在循环里等待浪费时间 。

    推荐阅读