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) 编辑 收藏 举报