python学习笔记

本文详细解析了计算机操作系统中进程与线程的概念及其区别,包括中断的作用、内核态与用户态的区别、进程间的通信方式等内容,并介绍了threading模块中的Event和Condition的区别以及Lock和RLock的不同点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python学习笔记

进程和线程


1. 计算机操作系统中的“中断”的作用

中断是指当操作系统执行一个程序的时候,当该程序遇到IO阻塞,运行时间过长,或急需CPU处理的事件,CPU会终止运行当前的程序切换执行其他的进程,然后再回过来执行原来的进程。
中断可以充分得利用CPU的资源,使CPU高效的工作。

2.”内核态” 和“用户态”

当程序执行系统调用的时候陷入执行内核代码的时候,就称进程处于内核状态,这时CPU可以访问内存中的所有数据。CPU可以自行被其他程序调用。
当程序执行自己代码的时候,就称当前程序处理用户态。此时程序占用CPU的能力被剥夺,CPU资源可以被其他程序获取。

3.进程

进程指的是正在执行的过程,
程序指的是一堆的代码

4.线程

进程相当于一个车间,那么线程就相当于车间里面的一条流水线。
进程是把资源集合在一起,那么线程才是CPU执行的单元。

5.程序执行过程

程序被加载到内存中,然后通过解释器进行处理和调用系统

6.系统调用

系统调用指的是应用程序通过操作系统提供的接口来调用操作系统和硬件

7.进程间的通信方式

  1. 管道:速度慢,容量有限,只有父子进程能通讯
  2. FIFO:任何进程间都能通讯,但速度慢
  3. 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
  4. 信号量:不能传递复杂消息,只能用来同步
  5. 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

8.队列和管道

队列和消息都是用来传递消息的
队列相对比较高级,有优先级等比较高级的用法
管道相对比较单一,管道分PIPE和FIFO,PIPE是无名的,所以只能在进程内或父子进程间通信,FIFO可任何两个进程间通信了

9.join daemon

join是等待线程执行完毕,适用于当主进程执行到某一阶段时,主线程需要等待子线程执行完毕时才能执行。
daemon 为守护进程,即当主线程结束时,子进程立马终止。

10.threading模块event和condition的区别

event来实现线程之间的通信

11.threading中Lock和RLock的相同点和不同点

相同点:都是线程锁
不同点:Lock会造成死锁,Rlock不会造成死锁

12.什么是select,请简述它的工作原理,简述它的优缺点

13.请简述IO多路复用模型的工作原理

当有请求来的时候,会发送到select,然后select再告诉有没有数据要读取,select可以同时监控多个套接字,然后同时返回给套接字。
注意:如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接

14.什么是select,请简述它的工作原理,简述它的优缺点

select可以同时监控多个socket是否可读可写,IO多路复用的机制
缺点:
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大

(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大

(3)select支持的文件描述符数量太小了,默认是1024

posted @ 2018-03-15 21:32 悟空等待唐僧的日子 阅读( ...) 评论( ...) 编辑 收藏
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值