zoukankan      html  css  js  c++  java
  • linux杂七杂八

    linux五种网络IO模型:阻塞型IO,非阻塞性IO,IO多路复用,信号驱动IO和异步IO,网络IO的本质就是socket的读取

    • 阻塞io:应用程序一直询问内核是否可以进行io操作

    • 非阻塞io就是systemcall发起IO操作之后,一直主动询问内核可以执行io操作了吗,在询问之后这个任务期间可以做其他操作

    • io多路复用就是有select等函数帮我们监听是否可以进行io操作了,可以同时监听多个任务的io操作,高并发采用这种方式

    • 信号驱动io也是同步,只是通过回调或者信号的方式,被动知道了什么时候可以io操作了

    • 异步io就是发起systemcall之后,继续执行下个任务,通过回调的方式,直接获取io执行成功或者失败的结果,不用应用程序自己执行io操作

    • 所以高并发都是采用这种模式,而不是采用多任务加上阻塞的方式,因为那样比较消耗资源

    • 具体内容可见:linux中的IO模型这个

    • select,poll和epoll

      • 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,进程查看)

    • lsof(lists openfiles) 

    • netstat(Netstat 命令用于显示各种网络相关信息,如网络连接,路由表)

      • netstat -entlp(n:拒绝显示别名,尽量用数字显示;t:tcp相关;l:listening;p:显示建立相关链接的程序名;e:显示扩展信息,例如uid等)

    • top:查看系统总体情况

    • free:查看内存使用

    • cpu:

    • 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 了。

      unmask:取消对 unit 的注销。

    aptitude与apt install

  • 相关阅读:
    [Writeup]奇怪的单点音
    [Writeup]百度一下,你就知道
    C语言学习一个月后感想
    小黄衫获得感想及经验总结
    Ubuntu初始化配置
    在Ubuntu 18.04中安装 docker compose
    Docker安装 配置
    Laravel Heroku评价
    Laravel Deploy to Heroku
    Laravel Nuxt auth refresh
  • 原文地址:https://www.cnblogs.com/ycg-blog/p/12762231.html
Copyright © 2011-2022 走看看