美文网首页
计算机基础

计算机基础

作者: hellomyshadow | 来源:发表于2020-02-07 13:03 被阅读0次

    Spooling

    Spooling:假脱机技术,虚拟设备技术。

    • 一种关于慢速字符设备如何与计算机主机交换信息的技术。
    • 利用高速共享设备将低速的独享设备模拟成高速的共享设备。
    • 逻辑上,系统为每个用户都分配了一台独立的高速独享设备。
    Spooling.jpg
    • 在输入、输出之间增加了排队转储环节 -- 输入井、输出井
    • Spooling负责输入井和输出井与低速设备之间的调度
    • 逻辑上,进程直接与高速设备交互,减少了进程的等待时间

    线程同步

    两个线程的指令是交叉执行的,在访问同一份临界资源时,就可能造成线程同步问题。
    互斥量:互斥锁,保证两个线程访问临界资源的关键指令先后执行,也即是原子性

    • 最简单的线程同步方法,会阻塞线程
    • 处于两个状态之一的变量:解锁、加锁
    • 两个状态可以保证资源访问的串行

    自旋锁
    自旋锁也是一种多线程同步的变量,工作原理与互斥量相同,对临界资源加锁、解锁。

    • 使用自旋锁的线程会反复检查锁变量是否可用
    • 自旋锁不会让出CPU,是一种忙等待状态
    • 自旋锁本质上是死循环等待锁被释放

    与互斥量相比的优点:

    • 自旋锁避免了进程或线程上下文切换的开销
    • 操作系统内部很多地方使用了自旋锁
    • 自旋锁不适合在单核CPU上使用

    读写锁:基于临界资源的考量,对锁做出的改进。

    临界资源多读少写,读取时并不会改变临界资源的值。由此,是否存在效率更高的同步方法呢?-- 读写锁

    • 读写锁是一种特殊的自旋锁,允许多个读者同时访问资源以提高读性能,但对写操作仍然是互斥的。
    • 对读操作的指令加/解读锁,对写操作的指令加/解写锁

    条件变量

    • 条件变量是一种相对复杂的线程同步方法,使用场景更加灵活
    • 条件变量允许线程睡眠-- wait,直到满足某种条件
    • 当满足条件时,可以向该线程发送唤醒信号-- signal/notify

    进程同步

    进程与线程.jpg

    由于操作系统的进程管理,进程 间的内存空间是相互独立的。
    进程默认不能访问进程空间之外的内存空间。

    共享内存
    共享内存是操作系统提供的一种实现进程同步的重要方法,也是高性能后台开发中最常用的进程同步方式。

    共享内存.jpg
    • 共享存储允许不相关的进程访问同一片物理内存。
    • 共享内存是两个进程之间共享和传递数据最快的方式。
    • 共享内存并未提供同步机制,需要借助其他机制管理访问。

    使用步骤:申请共享内存 -> 连接到进程空间 -> 使用共享内存 -> 脱离进程空间并删除

    Unix域套接字

    • 域套接字是一种高级的进程间通信的方法,可用于同一机器进程间的通信。

    套接字(socket) 原是网络通信中使用的术语,Unix系统提供的域套接字提供了网络套接字类似的功能。

    • Unix域套接字不需要额外的机制管理进程同步问题。
    • 在部署Nginx、uWSGI ...等服务时,都会使用到Unix域套接字。

    将两个进程分别命名为客户端、服务端,通过域套接字进行通信
    客户端进程 <-- [域套接字] --> 服务端进程

    域套接字的使用.jpg
    • 提供了单机简单可靠的进程通信同步服务
    • 只能在单机使用,不能跨机器使用。跨机器时需要使用网络套接字。

    线程池

    线程池是存放多个线程的容器;
    CPU调度线程执行后不会销毁线程,而是放回线程池重复利用。

    使用线程池的目的:

    • 线程是稀缺资源,不应该被频繁的创建和销毁;
    • 架构解耦,线程创建和业务处理解耦,更加优雅;
    • 线程池是使用线程的最佳实践。

    阿里的Java手册中强制要求使用线程池。

    相关文章

      网友评论

          本文标题:计算机基础

          本文链接:https://www.haomeiwen.com/subject/suemxhtx.html