zoukankan      html  css  js  c++  java
  • 并发编程和MySQL总结

    1️⃣  并发编程主要内容:

    操作系统工作原理介绍、线程、进程演化史、特点、区别、互斥锁、信号、事件、join、GIL、进程间通信、管道、队列。
    生产者消费者模型、异步模型、IO多路复用模型、selectpollepoll 高性能IO模型源码实例解析、高并发FTP server开发

    一、问答题

      1、简述计算机操作系统中的“中断”的作用?

    中断是指计算机在执行期间,系统内发生任何非寻常或非预期的继续处理事件,使得CPU暂时中断当前正在执行的程序,转而去执行相应的事件处理程序。待处理完毕后又返回原来的被中断处继续执行或调度新的进程执行的过程。
    优点:它使计算机能够更好更快利用有限的系统资源解决系统响应速度和运行效率的一种控制技术,实时响应,系统调度。

      2、简述计算机内存中的“内核态”和“用户态”?

    内核态:CPU可以访问内存的所有数据,包括外围设备,例如硬盘,网卡等,CPU也可以将自己从一个程序切换到另一个程序。
    用户态:只能受限的访问内存,且不允许访问外围设备,占用CPU的能力被剥夺,CPU资源被其他程序获取。
    
    划分内核态和用户态的原因:
        ① 限制不同程序之间的访问能力,防止他们获取其他程序的内初步数据,或者获取外围设备,并发送到网络。
        ② COU划分两个权限等级:内核态和用户态

      3、什么是进程?

    正在执行的一个程序或者任务,负责执行任务的是CPU。进程是用来把资源集中到一起的,进程是指资源单位,或者资源集合。

      4、什么是线程?

    线程是CPU上的执行单位,同一个进程内的多个线程共享该进程内的地址资源。创建线程的开销要远小于创建进程的开销。

      5、简述程序的执行过程

    ① 激活python的解释器,有一个解释器级别的垃圾回收线程(GIL锁);
    ② 一个进程内的多个线程先访问解释器的代码,多线程去抢GIL锁,抢到将程序当作参数传递给解释器去执行;
    ③ 保护不同的数据应该用不同的锁。
    ④ python程序是按照顺序执行的;
    ⑤ 一段python程序以.py文件运行时,文件属性__name__ == __main__ ,作为模块名导入时,文件属性__name__为文件名。

      6、什么是”系统调用“?

    所有的用户程序都是运行在用户态的,但是有时候程序确实需要做一些内核态的事情,例如从硬盘读取数据,或者从键盘获取输入等,而唯一能做这些事情的就是操作系统,所以此时程序就需要向操作系统请求以程序的名义来执行这些操作。
    这时就需要一个机制:用户态程序切换到内核态,但是不能控制在内核态中执行的指令,这种机制就叫系统调用。

      7、threading模块event和condition的区别

    关于Event:
        一个线程需要根据另外一个线程的状态来确定自己的下一步操作,需要调用threading库中Event对象;Event包含一个可由线程设置的信号标志,在初始情况下,event对象的标志位为假(false);。如果一个线程等待一个event对象,而这个event对象标志为假,那么这个线程将会被一直阻塞到标志为真(true)。
        具体参数如下:
        from threading import Event
        event = Event()
        event.set()   # 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
        event.is_set()  #返回event的状态值;
        event.wait()    #如果 event.is_set()==False将阻塞线程;
        event.clear()   #恢复event的状态值为False

     Event事件的应用实例:

    from threading import Thread,Event
    import time
    
    def student(name):
        print('%s上课了'%name)
        event.wait()
        print('%s下课了'%name)
    
    def teacher(name,t_course):
        print('%s准备讲课了'%name)
        print('%s开始上课'%name)
        time.sleep(t_course)
        event.set()
        print('学生们放学了')
    
    
    if __name__ == '__main__':
        event = Event()
        t = Thread(target=teacher,args=('刘老师',10))
        s1 = Thread(target=student,args=('Jack',))
        s2 = Thread(target=student,args=('Alice',))
        s3 = Thread(target=student,args=('France',))
        t.start()
        s1.start()
        s2.start()
        s3.start()

    未完待续...

  • 相关阅读:
    C# 获取数组最小下标或最大下标
    使用EPplus 打开Excel报错
    EPplus的读写
    SQL Server 无法生成 FRunCM 线程
    WinForm无法加载'SQLite.Interop.dll'的问题
    雪花算法-唯一ID生成器
    .NET使用AutoResetEvent实现多线程打印奇偶数
    docker安装Elasticsearch+Kibana+密码配置+Kibana中文设置
    语义化版本 2.0.0
    Chrome 上所有受限端口的列表
  • 原文地址:https://www.cnblogs.com/schut/p/9142036.html
Copyright © 2011-2022 走看看