Linux的五种IO模型

Linux的五种IO模型,第1张

在linux中,对于一次读取IO请求(不仅仅是磁盘,还有网络)的 *** 作,数据并不会直接拷贝到用户程序的用户空间缓冲区。它首先会被拷贝到 *** 作系统的内核空间,然后才会从 *** 作系统内核的缓冲区拷贝到用户空间的缓冲区。

大概是这个样子。

从图中可以看见,这是分四步进行的,而这四步里面有些细节,就有了这5种IO模型

前四种为同步IO,后一种为异步IO,什么是同步异步可以看看我之前写的 同步与异步,阻塞与非阻塞 。

应用进程发起系统调用后就阻塞了,直到内核buffer拷贝到用户buffer,发出成功提示后才继续执行。

适用场景:并发量小的要及时响应的网络应用开发,JavaBIO。

优点:易于开发,不消耗CPU资源(线程阻塞),及时响应。

缺点:不适用与并发量大的网络应用开发,一个请求一个线程,系统开销大。

应用进程发起系统调用,内核立马返回一个自己当前的缓冲区的状态(错误或者说成功),假如

为错误则隔段时间再系统调用(轮询),直到返回成功为止。另外再说一点,有人说轮询之间可以设置一个时间,例如每几秒执行一次,然后在这段期间程序可以干自己的事情。(这个我不清楚是不是,虽然理论上可以实现,但是我觉得第一种与第二种的区别应该强调的是是否放弃CPU,第二种有点CAS+轮询这种轻量级锁的感觉,第一种就是那种重量级锁的感觉)。

适用场景:并发量小且不用技术响应的网络应用开发

优点:易于开发,可以在轮询的间断期间继续执行程序。

缺点:不适用与并发量大的网络应用开发,一个请求一个线程,系统开销大。消耗CPU资源(轮询),不及时响应。

将多个IO注册到一个复用器上(select,poll,epoll),然后一个进程监视所有注册进来的IO。

进程阻塞在select上,而不是真正阻塞在IO系统调用上。当其中任意一个注册的IO的内核缓冲区有了数据,select就会返回(告诉程序内核态缓存有数据了),然后用户进程再发起调用,数据就从内核态buffer转到用态buffer(这段期间也是要阻塞的)。

适用场景:并发量大且对响应要求较为高的网络应用开发,JavaNIO

优点:将阻塞从多个进程转移到了一个select调用身上,假如并发量大的话select调用是不易被阻塞的,或者说阻塞时间短的。

缺点:不易开发,实现难度大,当并发量小的时候还不如同步阻塞模型。

应用程序向内核注册一个信号处理程序,然后立即返回,当数据准备好了以后(数据到了内核buffer),内核个应用进程一个信号,然后应用进程通过信号处理程序发起系统调用,然后阻塞直达数据从内核buffer复制到用户buffer。

优点:将阻塞从多个进程转移到了一个select调用身上,假如并发量大的话select调用是不易被阻塞的,或者说阻塞时间短的。

缺点:不易开发,实现难度大。

以上四个IO模型都可以看出来,到最后用户进程都要在数据从内核buffer复制到用户buffer时阻塞,直到内核告诉进程准备成功。这就是同步进程,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续 *** 作。

就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续 *** 作

这个就是直到数据copy完成到用户buffer才通知。

应用场景:Java AIO,适合高性能高并发应用。

优点:不阻塞,减少了线程切换,

缺点:难以实现,要 *** 作系统支持。

Linux 系统中有以下几种常见的登录界面模式

终端模式(Text Mode):终端模式是 Linux 系统的最基本模式,通常以命令行的形式进行 *** 作。

图形模式(Graphical Mode):图形模式提供了图形化的界面,可以使用鼠标和键盘进行 *** 作。

远程模式(Remote Mode):远程模式允许你从远程计算机连接到 Linux 系统,通常使用 SSH 协议进行连接。

安全模式(Safe Mode):安全模式是在 *** 作系统出现问题时使用的模式,通常只加载最基本的驱动和服务,以便于进行故障排除和修复。

这些就是 Linux 系统中常见的登录界面模式。不同的模式适用于不同的场景,你可以根据需要选择合适的模式进行 *** 作。

如果你的登录界面模式是指 `图形模式(Graphical Mode)`

那么常见的linux 图形模式(Graphical Mode)有:

X Window 系统(X Window System):X Window 系统是 Linux 系统中最常见的图形模式,提供了丰富的图形化界面和多种图形窗口管理器(Window Manager)选择。

Wayland:Wayland 是一种新型的图形显示系统,在 X Window 系统的基础上进行了改进,提供了更快的性能和更好的用户体验。

Mir:Mir 是一种专门为 Ubuntu *** 作系统设计的图形显示系统,提供了优秀的性能和兼容性。

这些就是 Linux 系统中常见的图形模式。

如果你的登录界面模式指的是图形窗口管理器(Window Manager)

那么常见的图形窗口管理器(Window Manager)有以下几种:

GNOME:GNOME 是一种流行的图形桌面环境,提供了丰富的功能和友好的用户界面。

KDE:KDE 是另一种流行的图形桌面环境,提供了丰富的功能和自定义性。

Xfce:Xfce 是一种轻量级的图形桌面环境,适用于低端计算机和服务器。

LXDE:LXDE 是另一种轻量级的图形桌面环境,适用于低端计算机和服务器。

Openbox:Openbox 是一种简洁的图形窗口管理器,适用于轻量级的图形桌面环境。

.....

o: 编译的目标文件

a: 静态库,其实就是把若干o文件打了个包

so: 动态链接库(共享库)

lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息

la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8588000.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存