zoukankan      html  css  js  c++  java
  • 操作系统 part5

    1.线程安全

    线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

    线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

    2.Linux5种IO模型

    概念:
    同步:发出一个功能的调用,在没有得到结果前,该调用不返回。
    异步:一个异步过程调用发出后,调用不能立刻得到结果,在完成后通过通知、回调来通知调用者。
    阻塞:调用结果未返回前,线程会被挂起。
    非阻塞:不能立刻得到结果前,该函数不会阻塞当前线程,而会立刻返回。
    同步和异步是相对于消息的通知机制而言的,阻塞和非阻塞是相对于等待消息时的状态来说的。

    1. (同步)阻塞式IO模型:程序调用一个IO函数,如果数据没有准备好,就一直等待。
    2. (同步)非阻塞式IO模型:程序调用IO后,进程不会被阻塞,内核马上返回给进程,如果数据没准备好,返回一个error,不断轮询检查数据是否准备好,准备好就拷贝数据到进程。
    3. (同步)IO复用模型:单个进程就可以同时处理多个网络连接的IO。它的基本原理就是不再由应用程序自己监视连接,取而代之由内核替应用程序监视文件描述符。
    4. (同步)信号驱动IO模型:允许socket进行信号驱动IO,并注册一个信号处理函数,进程继续运行并不阻塞,当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用IO操作,将数据从内核空间复制到用户空间。
    5. 异步IO模型:用户态进程告诉内核态需要什么数据,然后进程就可以继续干别的事情。内核等待数据准备好,然后将数据复制到用户空间,此时再告诉进程数据已经准备好。
  • 相关阅读:
    centOS7下安装GUI图形界面
    centos7 安装VMware Tools 遇到的一系列问题的解决方案
    centos7 更新源 安装ifconfig
    隐写 小案例
    linux shell脚本编程笔记(二): 分支结构
    strncmp memcmp区别
    linux shell脚本编程笔记(一): 构建基本脚本
    linux: sort排序数据 grep搜索数据
    C/C++控制台输出时设置字体及背景颜色
    boost.asio包装类st_asio_wrapper开发教程(转)
  • 原文地址:https://www.cnblogs.com/KirinSB/p/12822006.html
Copyright © 2011-2022 走看看