-
阻塞io:应用程序一直询问内核是否可以进行io操作
-
非阻塞io就是systemcall发起IO操作之后,一直主动询问内核可以执行io操作了吗,在询问之后这个任务期间可以做其他操作
-
io多路复用就是有select等函数帮我们监听是否可以进行io操作了,可以同时监听多个任务的io操作,高并发采用这种方式
-
信号驱动io也是同步,只是通过回调或者信号的方式,被动知道了什么时候可以io操作了
-
异步io就是发起systemcall之后,继续执行下个任务,通过回调的方式,直接获取io执行成功或者失败的结果,不用应用程序自己执行io操作
-
所以高并发都是采用这种模式,而不是采用多任务加上阻塞的方式,因为那样比较消耗资源
-
具体内容可见:linux中的IO模型和这个
-
-
select==>时间复杂度O(n)
-
无差别轮询所有IO流,找出能读出数据,或者写入数据的流,对他们进行操作。
-
-
poll==>时间复杂度O(n)
-
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的.
-
-
epoll==>时间复杂度O(1)
-
epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的。(复杂度降低到了O(1)
-
-
网路IO与磁盘IO
进程线程协程
-
操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。
-
线程可以说是轻量级进程,一个进程至少有一个线程,线程之间共享资源,线程是调度和分配的基本单位。
-
进程是拥有系统资源独立单位,而线程没有,进程切换消耗资源较大
-
协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源(因为资源调度的基本单位是线程,协程依附于线程)。 更多可见这里
linux中各种查看命令
-
ps(process show,进程查看)
-
ps -aux:#用标准的格式显示进程
-
ps -ef:#用BSD的格式来显示
-
更多见:https://blog.csdn.net/a12345555555/article/details/72770789
-
-
lsof(lists openfiles)
-
liof -i:查看端口对应已打开文件呢信息
-
lsof -p查看进程号对应已经打开文件
-
-
netstat(Netstat 命令用于显示各种网络相关信息,如网络连接,路由表)
-
netstat -entlp(n:拒绝显示别名,尽量用数字显示;t:tcp相关;l:listening;p:显示建立相关链接的程序名;e:显示扩展信息,例如uid等)
-
-
top:查看系统总体情况
-
free:查看内存使用
-
cpu:
-
查看cpu硬件信息:cat /proc/cpuinfo
-
查看cpu使用情况:top,vmstat,sar
-
-
df(查看磁盘使用空间)
-
df -h:查看磁盘总体使用空间
-
cat /proc/partitions:查看磁盘分区情况
-
- 查看某个目录下文件个数:ls 目录 |wc-l
查看文件大小:Du -sh
systemctl
-
systemctl [command] [unit]
command 主要有:
start:立刻启动后面接的 unit。
stop:立刻关闭后面接的 unit。
restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的 unit 会被启动。
disable:设置下次开机时,后面接的 unit 不会被启动。
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
is-active:目前有没有正在运行中。
is-enable:开机时有没有默认要启用这个 unit。
kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
show:列出 unit 的配置。
mask:注销 unit,注销后你就无法启动这个 unit 了。