`

何为非阻塞?

 
阅读更多

何为非阻塞?

下面有个隐喻:

一辆从 A 开往 B 的公共汽车上,路上有很多点可能会有人下车。司机不知道哪些点会有哪些人会下车,对于需要下车的人,如何处理更好?

1. 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车。 ( 类似阻塞式 )

2. 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车。 ( 类似非阻塞 )

很显然,每个人要到达某个目的地可以认为是一个线程,司机可以认为是 CPU 。在阻塞式里面,每个线程需要不断的轮询,上下文切换,以达到找到目的地的结果。而在非阻塞方式里,每个乘客 ( 线程 ) 都在睡觉 ( 休眠 ) ,只在真正外部环境准备好了才唤醒,这样的唤醒肯定不会阻塞。

  非阻塞的原理

把整个过程切换成小的任务,通过任务间协作完成。

由一个专门的线程来处理所有的 IO 事件,并负责分发。

事件驱动机制:事件到的时候触发,而不是同步的去监视事件。

线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的进程切换。

分享到:
评论

相关推荐

    Java网络编程(第三版)中文版.part11.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)高清中文版.part01.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part06.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part07.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part09.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part01.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part03.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part02.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part04.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part13.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part10.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part05.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part12.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part08.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    MPI并行程序开发

    - 非阻塞发送:`MPI_Isend`,非阻塞接收:`MPI_Irecv`。 - 状态查询:`MPI_Test`,等待完成:`MPI_Wait`。 - **动态进程管理** - 创建新进程:`MPI_Comm_spawn`。 - 加入进程:`MPI_Comm_accept`。 - 终止进程...

    Reactor指南中文版 2.0

    Reactor是一个基于JVM之上的...综上所述,Reactor为构建基于事件和数据驱动的异步应用提供了一个高效的框架,通过其特有的事件循环和非阻塞机制,为开发者提供了一套简洁、强大的工具集,以实现复杂应用的高性能处理。

    安卓学习实践总结

    8. **异步处理**:AsyncTask、Handler、Runnable和Thread是安卓中常见的异步处理方式,用于解决UI线程阻塞问题。熟练运用这些方法,能够优化用户体验,避免应用卡顿。 9. **Android Jetpack组件**:Android Jetpack...

    Spring中@Async用法详解及简单实例

    主线程启动一个新线程执行任务,然后继续执行其他工作,从而达到非阻塞的效果。 3. **@Async介绍** Spring中的@Async注解使得在bean方法上声明异步调用变得简单。一旦标记了一个方法,Spring会在单独的线程中执行...

Global site tag (gtag.js) - Google Analytics