浅谈io阻塞

ChiG 2018-06-21 02:32:29
注 :欢迎大家讨论。

io阻塞在日常项目中是最常遇到的问题,但是你确定你遇到的是io阻塞嘛?

首先简单了解端口监听!
一个端口只能由一个程序监听,但可以由多个外部客户端连接,每个客户端+服务器端是一个连接,所以给你一种多程序同时监听的感觉
程序实现的时候,比如说你用TcpListener监听,每个客户端连接上你的端口后会产生一个Socket(通过TcpListener.AcceptSocket()得到),这时候你就可以去处理这个socket了,而下一个客户端会产生另一个socket,你再去处理下一个,同时你可以开启多线程,这样就可以同时处理多个客户端连接了。
最近我在使用Ganymed SSH-2这个包的时候遇到的一些小问题,首先这个包是单线程的和jsch不同,我在使用readLine进行回显读取的时候发现会出现阻塞,这个阻塞不是io的阻塞,是在使用readLine读取数据的时候(回显)得不到换行符所以无法得到缓冲区最后一行的数据,导致当前程序卡死,无法继续执行,这个是个程序阻塞,当时我发现这个问题然后写了一篇文章,标题写成了io阻塞,真是惭愧,所以很多时候我们看到的阻塞,不一定就是io阻塞。
readLine这个方法是将io口中的数据读入缓冲区(字节),在读取缓冲区的数据,在发现换行符的时候就返回一行数据,如果读取不到换行符,则停止不动。这个方法说真的还很坑的。

所以请各位看官,来分享一下io阻塞的经典案例。

...全文
802 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hookee 2018-06-23
  • 打赏
  • 举报
回复
htcyrylcmj0415 2018-06-21
  • 打赏
  • 举报
回复
学习一哈

5,655

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧