找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 612|回复: 4

非阻塞IO与异步IO有什么区别

[复制链接]

3

主题

3

回帖

21

积分

新手上路

积分
21
发表于 2025-3-12 15:49:01 | 显示全部楼层 |阅读模式
  一直认为非阻塞与异步IO是同一个东西。但是今天有人说这两个是不一样的。而且它们的定义也是不一样的 非阻塞 I/O(Non-blocking I/O)异步 I/O(Asynchronous I/O)。

  有谁知道吗?


0

主题

3

回帖

8

积分

新手上路

积分
8
发表于 2025-3-12 16:00:23 | 显示全部楼层
本帖最后由 TkPower 于 2025-3-12 16:09 编辑

Talk is cheap, show you the Code.

如下可以理解,什么叫阻塞与非阻塞;如果read时在等待数据,线程可以做别的处理
  1. Socket socket = getSocket();
  2. ByteBuffer buffer = ByteBuffer.allocate(1024);
  3. int bytesRead = sc.read(buffer);//这里也是非阻塞
复制代码

0

主题

3

回帖

8

积分

新手上路

积分
8
发表于 2025-3-12 16:03:04 | 显示全部楼层
如下是异步的例子,Android okhttp的标准用法:
  1. Request request = new Request.Builder()
  2.                 .url("...")
  3.                 .build();        
  4.         client.newCall(request).enqueue(new Callback() {
  5.             @Override
  6.             public void onResponse(Call call, Response response) throws IOException {
  7.                 }
  8.             }
  9.         });
复制代码

0

主题

3

回帖

8

积分

新手上路

积分
8
发表于 2025-3-12 16:04:04 | 显示全部楼层
本帖最后由 TkPower 于 2025-3-12 16:10 编辑

所以 阻塞 与 异步的实现方式是不同的。
异步线程不会卡住,等别的线程返回结果。
而阻塞就有点像协程了。

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2025-3-13 11:15:06 | 显示全部楼层
正好看这个  赞一个
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件开发

GMT+8, 2025-8-27 10:08 , Processed in 0.118875 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表