9.阻塞与非阻塞

2021-09-24  本文已影响0人  进击的小鹿

阻塞I/O的编程模型非常易于理解,但性能却并不理想,它会造成CPU大量闲置。使用阻塞I/O开发的系统,其吞吐量会比较低。虽然可以进行优化,使每一次 Socket 请求使用独立的线程,但这样做会造成线程膨胀,使系统越来越慢,最终宕机。通过线程池可以控制系统创建线程的数量,但仍然无法实现系统性能最优。

可以使用一个线程监听所有的 Socket请求,从而极大地减少线程数量。

对于I/O与CPU密集程度适度的操作而言,使用非阻塞将会极大地提升系统吞吐量,但用户进程不停轮询会在一定程度上导致额外的CPU资源浪费。

因此,判断阻塞I/O与非阻塞I/O时应关注程序是否在等待调用结果——如果系统内核中的数据还未准备完成,用户进程是继续等待直至准备完成,还是直接返回并先处理其他事情。

上一篇下一篇

猜你喜欢

热点阅读