阻塞和非阻塞是在网络编程中经常听到的两个词。它们其实描述的是当一个程序在等待某些事情发生时,它会怎么做。
阻塞:
想象你正在给一个好朋友打电话,但你的朋友正在忙,没有接电话。如果你选择“阻塞”方式,那就意味着你会一直拿着电话等待,直到你的朋友接电话为止。在这期间,你不能做其他事情,只能等待。
在网络编程中,“阻塞”就是当一个程序试图与其他程序或服务器通信时,如果对方没有立即响应,那么这个程序就会停下来等待,直到收到响应为止。在等待的这段时间里,程序不能做其他事情。
非阻塞:
还是上面的电话例子,如果你选择“非阻塞”方式,当朋友没有接电话时,你可以选择先挂断,过会儿再打,或者同时做点其他事情,比如看书或看电视。
在网络编程中,“非阻塞”意味着当一个程序试图与其他程序或服务器通信时,如果对方没有立即响应,这个程序不会停下来等待,而是会继续做其他的事情。等过一段时间,它会再次尝试通信。
区别:
- 等待方式:阻塞是“一直等”,直到得到响应;非阻塞是“等一会儿”,没响应就去做别的事。
- 效率:阻塞可能在等待时浪费了很多时间;非阻塞可以在等待的时候做其他事情,更加高效。
- 复杂性:非阻塞编程通常需要更多的代码和逻辑来处理可能的同时发生的事件,所以它相对更复杂一些。