浅谈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阻塞的经典案例。