首页 > 试题广场 >

Java服务器网络开发时, 请说明通讯中阻塞(blockin

[问答题]
Java服务器网络开发时, 请说明通讯中阻塞(blocking)/非阻塞(non-blocking 与 同步/异步IO的区别。
堵塞与非堵塞通常用来形容多线程间 的相互影响。当一个线程占用了临界区的资源,那么其它同样需要此资源的线程必须要当占有资源的线程释放资源后才能获取资源,这导致了其它线程被挂起。非堵塞指没有一个线程可以妨碍到其他线程执行。
而同步和异步通常是用来形容一次方法调用。同步方法一旦调用开始,调用者必须等到该方法执行返回后,才能继续后续的操作i。而异步方法通常会在另外一个线程中“真实”地执行,整个过程,不会影响调用者的工作,一旦异步方法调用开始,方法调用会立即反不会,调用者可以继续后续的操作。
发表于 2018-08-11 14:19:46 回复(0)
更多回答

同步/异步主要针对客户端:

        同步:就是当客户端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是说必须一件一件的事情去做,等一件做完了才能去做下一件。

         异步:就是当客户端发出一个功能调用时,调用者不用等接收方发出响应。实际处理这个调用的部件在完成后,会通过状态,通知和回调来通知调用者。客户端可以接着去做 后面的事情。

        虽然主要是针对客户端,但是服务器端不是完全没有关系的,同步/异步必须配合服务器端才能实现。同步/异步是由客户端自己控制,但是服务器端是否阻塞/非阻塞,客户端完全不需要关心。

阻塞/非阻塞主要是针对服务器端:

        阻塞:阻塞调用是指服务器端被调用者调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

        非阻塞:指在不能立即得到结果之前,该调用不会阻塞当前线程。

发表于 2018-06-14 10:37:49 回复(0)
同步/异步主要针对客户端:
同步:就是当客户端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是说必须一件一件的的事情去做,等一件做完了才能去做下一件。
异步:就是当客户端发出一个功能调用时,调用者不用等接收方发出响应。实际处理这个调用的部件在完成后,会通过状态,通知和回调来通知调用者。客户端可以接着去做后面的事情。
虽然主要是针对客户端,但是服务器端不是完全没有关系的,同步/异步必须配合服务器端才能实现。同步/异步是由客户端自己控制,但是服务器端是否阻塞/非阻塞,客户端完全不用关心。
阻塞/非阻塞主要针对服务器端:
阻塞:阻塞调用是指服务器端被调用者调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞:指不能立即得到结果之前,该调用不会阻塞当前线程。
发表于 2018-06-27 17:04:33 回复(2)
        阻塞和非阻塞区别:当采用BIO时,如果没有收到信息,则会一直处于等待状态,线程不休眠;而采用NIO时,当有消息到达时才进行处理,没有消息到达时就干别的事。
        同步和异步IO:当进行IO操作时(例如复制文件),若采用同步IO,那么程序会等IO完毕才往下执行;而异步IO会讲IO操作交给操作系统来完成,程序继续往下执行,当操作系统完成后会做出通知。
发表于 2018-06-18 20:30:11 回复(0)