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

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

一、问答题

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

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

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

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

  3、什么是进程?

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

  4、什么是线程?

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

  5、简述程序的执行过程

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

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

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

  7、threading模块event和condition的区别

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

Event事件的应用实例:

  1. from threading import Thread,Event
  2. import time
  3.  
  4. def student(name):
  5. print('%s上课了'%name)
  6. event.wait()
  7. print('%s下课了'%name)
  8.  
  9. def teacher(name,t_course):
  10. print('%s准备讲课了'%name)
  11. print('%s开始上课'%name)
  12. time.sleep(t_course)
  13. event.set()
  14. print('学生们放学了')
  15.  
  16. if __name__ == '__main__':
  17. event = Event()
  18. t = Thread(target=teacher,args=('刘老师',10))
  19. s1 = Thread(target=student,args=('Jack',))
  20. s2 = Thread(target=student,args=('Alice',))
  21. s3 = Thread(target=student,args=('France',))
  22. t.start()
  23. s1.start()
  24. s2.start()
  25. s3.start()

未完待续...

并发编程和MySQL总结的更多相关文章

  1. python 闯关之路四(上)(并发编程与数据库理论)

    并发编程重点: 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号. 事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模 ...

  2. python 闯关之路四(下)(并发编程与数据库编程)

    并发编程重点: 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号. 事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模 ...

  3. Python3 与 C# 并发编程之~ 线程篇

      2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...

  4. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  5. Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型

    一.背景知识 进程即正在执行的一个过程.进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都 ...

  6. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  7. Java并发编程原理与实战二十四:简易数据库连接池

    public class MyDataSource { private static LinkedList<Connection> pool = new LinkedList<> ...

  8. python并发编程&多线程(二)

    前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...

  9. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

随机推荐

  1. 《selenium2 python 自动化测试实战》(7)——定位一组对象

    定位一组对象 定位一组对象——find_elements_by_...(),注意,这里是elements,复数.返回的结果是一个列表,我们取值的时候就要用列表取值的方式来获得自己想要的元素.需要注意的 ...

  2. Sprint第一个冲刺(第一天)

    一.Sprint介绍 我们这次的团队项目是做<餐厅到店点餐系统>APP版,暂时不是基于用户需求来做的,但后期会进行用户需求调查,完善我们的软件.现在正在做一些前期准备,在团队合作上还缺乏一 ...

  3. saiku迁移至mysql步骤

    saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个bean执行org.saiku.service.Database类的i ...

  4. java代码---------再练习ChatAt()的用法

    总结: 没有理解方法的含义.瞎用 package com.mmm; //实现字符串中某个字符出现的次数 public class Mo { public static void main(String ...

  5. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  6. 在centOS5.9安装asterisk

    最近一直在研究asterisk这个服务器,Asterisk 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案.Asterisk是一种功能非常齐全的应用程序,提 ...

  7. SpringMVC+Spring+Mybatis -- 集成之旅

    准备 首先介绍一下,我的工具使用的是STS, 需要的童鞋可以到官网下载:http://spring.io/tools/sts/all 使用STS是因为她集成了Maven进行 “包“ 管理以及自带 We ...

  8. 安装scikit-image问题

    参考地址: Image Processing Using Python https://code.tutsplus.com/tutorials/image-processing-using-pytho ...

  9. 浅谈PHP面向对象编程(一、简介)

    传统的面向过程 将要完成的工作,分作若干个步骤,或再细分为子步骤,然后后步骤从前往后一步一步完成,最初达致目标. 现代的面向对象 将要完成的工作拆分为“一个一个对象”的任务(功能),每个对象独自完成自 ...

  10. css引用方式

    网页中引用CSS样式 内联样式 行内样式表 外部样式表 链接式 导入式 内嵌方式 style标签 <!doctype html> <html> <head> < ...