wait sleep 线程切换 IO阻塞 轮询 锁是否释放和当前线程是否占用CPU资源问题

1 wait 以后的 notify()函数释放锁,不占用CPU资源,线程暂定,CPU资源被让出。

 

2 sleep()函数 不释放锁,但是让出CPU资源,确定唤醒时间。

 

3 yield()函数 和操作系统的 自发的切换执行的线程,不释放锁,不确定唤醒时间。

 

4 因为等待网络IO阻塞/磁盘IO导致的线程阻塞,线程不暂停,依旧是活动状态,不存在是否释放锁的问题,占用CPU资源。

  NIO一个线程可以处理多个请求,但是如果这些线程的CPU资源被别的线程使用,那么依旧不能提高吞吐量。NIO因为一个线程可以处理多个连接,可以在接受accept请求的时候做到非阻塞,并且读写IO 数据的时候MDA或者零拷贝是可以减少CPU占用的,这时候数据复制依赖的主板上的DMA 相关的芯片,而不是CPU。NIO不能节省业务线程占用的CPU资源,NIO不是一定能提高吞吐量,只有在IO上占用时间占比较多的情景才能提高吞吐量。

 

5 自旋,轮询,空转等行为 占用CPU资源。

 

posted on 2022-09-27 01:24  zhangyukun  阅读(702)  评论(0编辑  收藏  举报

导航