python之并发编程(理论部分)

python之并发编程(理论部分)

2023年8月1日发(作者:)

python之并发编程(理论部分)第⼀章 操作系统1. 管理控制协调计算机中硬件与软件的关系.2. 操作系统的作⽤?第⼀个作⽤: :隐藏了丑陋的硬件调⽤接⼝,为应⽤程序员提供调⽤硬件资源的更好,更简单,更清晰的模型(系统调⽤接⼝)第⼆个作⽤: 将应⽤程序对硬件资源的静态请求变得有序化阻塞: input read write sleep recv accept sendto recvfrom .....1.操作系统的发展史最早出现的计算机: 算盘.电⼦类的计算机发展史:第⼀代计算机1940~1955在⼤学⾥出现了机房,想使⽤计算机必须预约.先连接调配各个硬件,1.5⼩时, 真空管, 然后在插上程序调试.效率低.优点: 个⼈独享整个计算机资源.缺点:

1. 硬件调试插线,耗时2. 所有⼈都是串⾏执⾏.第⼆代计算机 磁带存储---批处理系统 1955~1965优点:

程序员不⽤亲⾃对硬件进⾏插线操控,效率提⾼.可以进⾏批量处理代码.缺点:程序员不能独⾃使⽤计算机.你的所有程序还是串⾏.第三代计算机:集成电路,多道程序系统⼤背景:1.集成电路: 把所⽤的硬件变⼩,线路板.2.将两套不同的⽣产线合并成⼀条⽣产线.技术上的更新: 多道技术.1. 空间上的复⽤:将内存分区域,⼀个内存可以同时加载多个进程.2. 时间上的复⽤:当进程遇到IO阻塞,或者长时间运⾏,操作系统会将此进程挂起,保留状态.将cpu强⾏切换到另⼀个进程⼏乎所有的程序⼜有IO阻塞同时加载到内存 3个任务,3个进程,每个进程都有阻塞情况,只要cpu运⾏⼀个进程时,遇到IO阻塞⽴马回切换,长时间占⽤cpu也会切换.提升效率,最⼤限度的使⽤cpu.如果是⼀个IO密集型进程,来回切换提升效率.如果是⼀个计算密集型,来回切换降低效率.第三代计算机⼴泛采⽤了必须的保护硬件(程序之间的内存彼此隔离)之后,第三代计算机应⽤⽽⽣:每个⼈占⽤计算机的时间有限的,多⼈(少于10个) 共同使⽤⼀个计算机主机,第四代计算机: 1980 - ⾄今1.个⼈计算机操作系统    个⼈计算机上的操作系统是联机交互的单⽤户操作系统,它提供的联机交互功能与通⽤分时系统提供的功能很相似。    由于是个⼈专⽤,因此⼀些功能会简单得多。然⽽,由于个⼈计算机的应⽤普及,对于提供更⽅便友好的⽤户接⼝和丰富功能的⽂件系统的要求会愈来愈迫切。2.⽹络操作系统    计算机⽹络:通过通信设施,将地理上分散的、具有⾃治功能的多个计算机系统互连起来,实现信息交换、资源共享、互操作和协作处理的系统。    ⽹络操作系统:在原来各⾃计算机操作系统上,按照⽹络体系结构的各个协议标准增加⽹络管理模块,其中包括:通信、资源共享、系统安全和各种⽹络应⽤服务。    就是添加了⼀些⽹络⽅⾯的功能。3.分布式操作系统    表⾯上看,分布式系统与计算机⽹络系统没有多⼤区别。分布式操作系统也是通过通信⽹络,将地理上分散的具有⾃治功能的数据处理系统或计算机系统互连起来,实现信息交换和资源共享,协作完成任务。——硬件连接相同。    分布式:将⼀个⼤的任务拆分成⼏个⼩的任务,分配给不同的任务处理机制,具体怎么分配是由系统中的算法决定的,⼤家同时来运⾏⾃⼰的任务,然后各⾃将⼈物的返回结果再返回给你这个⼤的任务。    但有如下⼀些明显的区别:      (1)分布式系统要求⼀个统⼀的操作系统,实现系统操作的统⼀性。      (2)分布式操作系统管理分布式系统中的所有资源,它负责全系统的资源分配和调度、任务划分、信息传输和控制协调⼯作,并为⽤户提供⼀个统⼀的界⾯。      (3)⽤户通过这⼀界⾯,实现所需要的操作和使⽤系统资源,⾄于操作定在哪⼀台计算机上执⾏,或使⽤哪台计算机的资源,则是操作系统完成的,⽤户不必知道,此谓:系统的透明性。      (4)分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构、坚强性和容错能⼒有更⾼的要求,希望系统有:更短的响应时间、⾼吞吐量和⾼可靠性。    分布式系统已经很普遍了,⼀般个⼈⽤不到,企业在处理⽐较⼤的任务第⼆章 进程1.程序⼀堆静态的代码⽂件.2.进程⼀个正在运⾏的程序进程. 抽象的概念.由操作系统操控调⽤交于CPU运⾏ 被CPU运⾏.1. 并发和并⾏⽆论是并⾏还是并发,在⽤户看来都是'同时'运⾏的,不管是进程还是线程,都只是⼀个任务⽽已,真是⼲活的是cpu,cpu来做这些任务,⽽⼀个cpu同⼀时刻只能执⾏⼀个任务串⾏: 所有的任务⼀个⼀个的完成.并发: ⼀个cpu完成多个任务.看起来像是同时完成.并⾏: 多个cpu执⾏多个任务,真正的同时完成.2. 同步|异步and阻塞|⾮阻塞同步: 发起同步调⽤后,就在原地等着任务结束,根本不考虑任务是在计算还是在io阻塞,总之就是⼀股脑地等任务结束异步: 发起异步调⽤后,并不会等待任务结束才返回,相反,会⽴即获取⼀个临时结果(并不是最终的结果,可能是封装好的⼀个对象)阻塞: cpu遇到IO就是阻塞.⾮阻塞: 没有IO,就叫⾮阻塞.3. 进程的创建:⼀个⼦进程必须依赖于⼀个主进程才可以开启.⼀个主进程可以开启多个⼦进程.unix: fork创建⼦进程.unix(linux,mac): 创建⼀个⼦进程会完完全全复制⼀个主进程所有的资源,初始资源不变.windows: 操作系统调⽤CreateProcess 处理进程的创建.windows:创建⼀个⼦进程,会copy主进程所有的资源,但是会改变⼀些资源.4. 进程的终⽌1. 正常退出(⾃愿,如⽤户点击交互式页⾯的叉号,或程序执⾏完毕调⽤发起系统调⽤正常退出,在linux中⽤exit,在windows中⽤ExitProcess)2. 出错退出(⾃愿,python 中不存在)3. 严重错误(⾮⾃愿,执⾏⾮法指令,如引⽤不存在的内存,1/0等,可以捕捉异常,pt...)4. 被其他进程杀死(⾮⾃愿,如kill -9)5. 进程的层次结构⽆论UNIX还是windows,进程只有⼀个⽗进程,不同的是:  1. 在UNIX中所有的进程,都是以init进程为根,组成树形结构。⽗⼦进程共同组成⼀个进程组,这样,当从键盘发出⼀个信号时,该信号被送给当前与键盘相关的  2. 在windows中,没有进程层次的概念,所有的进程都是地位相同的,唯⼀类似于进程层次的暗⽰,是在创建进程时,⽗进程得到⼀个特别的令牌(称为句柄),6. 进程的状态:tail -f |grep '404'  执⾏程序tail,开启⼀个⼦进程,执⾏程序grep,开启另外⼀个⼦进程,两个进程之间基于管道'|'通讯,将tail的结果作为grep的输⼊。  进程grep在等待输⼊(即I/O)时的状态称为阻塞,此时grep命令都⽆法运⾏  其实在两种情况下会导致⼀个进程在逻辑上不能运⾏,1. 进程挂起是⾃⾝原因,遇到I/O阻塞,便要让出CPU让其他进程去执⾏,这样保证CPU⼀直在⼯作2. 与进程⽆关,是操作系统层⾯,可能会因为⼀个进程占⽤时间过多,或者优先级等原因,⽽调⽤其他的进程去使⽤CPU。  因⽽⼀个进程由三种状态7. 进程并发的实现进程并发的实现在于,硬件中断⼀个正在运⾏的进程,把此时进程运⾏的所有状态保存下来,为此,操作系统维护⼀张表格,即进程表(process table),每个进程占⽤⼀个进程表项(这些表项也称为进程控制块)  该表存放了进程状态的重要信息:程序计数器、堆栈指针、内存分配状况、所有打开⽂件的状态、帐号和调度信息,以及其他在进程由运⾏态转为就绪态或阻塞态时,必须保存的信息,从⽽保证该进程在再次启动时,就像从未被中断过⼀样。第三章 线程1.什么是线程进程是⽤来把资源集中到⼀起(进程只是⼀个资源单位,或者说资源集合),⽽线程是cpu上的执⾏单位。描述开启⼀个进程: 开启⼀个进程:进程会在内存中开辟⼀个进程空间,将主进程的资料数据全部复制⼀份,线程会执⾏⾥⾯的代码.多线程(即多个控制线程)的概念是,在⼀个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于⼀个车间内有多条流⽔线,都共⽤⼀个车间的资源。2.线程和进程1. 开启进程的开销⾮常⼤,⽐开启线程的开销⼤很多.2. 开启线程的速度⾮常快.要快⼏⼗倍到上百倍.3. 线程线程之间可以共享数据,进程与进程之间需借助队列等⽅法实现通信.3.为什么要⽤多线程?多线程指的是,在⼀个进程中开启多个线程,简单的讲:如果多个任务共⽤⼀块地址空间,那么必须在⼀个进程内开启多个线程。详细的讲分为4点:1. 多线程共享⼀个进程的地址空间 2. 线程⽐进程更轻量级,线程⽐进程更容易创建可撤销,在许多操作系统中,创建⼀个线程⽐创建⼀个进程要快10-100倍,在有⼤量线程需要动态和快速修改时,这⼀特性很有⽤ 3. 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在⼤量的计算和⼤量的I/O处理,拥有多个线程允许这些活动彼此重叠运⾏,从⽽会加快

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690876005a452630.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信