5

JAVA分享篇(4)基础知识大总结

 1 year ago
source link: https://www.laiketui.com/100747.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JAVA分享篇(4)基础知识大总结

行业动态 2022年12月1日 17:36 7

阻塞I/O (Blocking I/O)
就平常所说的I/O,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是:

当用户程序进程请求调用了系统调用,内核就开始了IO的第一个阶段:等待数据准备。

对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候内核就要等待足够的数据到来。而在用户程序进程这边,整个进程会被阻塞。

当内核一直等到数据准备好了,它就会将数据从内核中拷贝到用户程序进程,然后内核返回结果,用户程序进程才解除block的状态,重新运行起来。

所以,blocking IO的特点就是在IO执行的两个阶段都被block了。

非阻塞I/O (Non-Blocking I/O)
简称 NIO,可以通过设置socket使其变为non-blocking。

当对一个non-blocking socket执行读操作时,流程是:

当用户程序进程请求调用了系统调用,系统不会阻塞用户程序进程,而是立刻返回一个ewouldblock错误,从用户进程角度讲 ,并不需要等待,而是马上就得到了一个结果。

用户进程判断标志是ewouldblock时,就知道数据还没准备好,于是它就可以去做其他的事了,于是它可以再次发送recvfrom,一旦内核中的数据准备好了。并且又再次收到了用户进程的系统调用,那么它马上就将数据拷贝到了用户程序,然后返回。

常见创建启动线程两种方式
1、继承方式,自定义线程类继承java.lang.Thread类,然后调用start方法启动线程。

2、实现方式,自定义线程类实现java.lang.Runnable接口,调用Thread的构造方法传入Runnable对象实例线程对象,然后调用线程对象的start方法。

免责声明:部分文章信息来源于网络以及客户意见反馈,本站只负责对文章进行整理、排版、编辑,出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们会尽快联系您处理。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK