Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 08eab75

Browse files
💕(day13): Day13 学习笔记
1 parent 6b76ead commit 08eab75

File tree

2 files changed

+84
-4
lines changed

2 files changed

+84
-4
lines changed

‎README.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ Python 100 天从新手到大师个人学习笔记与实践。
134134
- [x] 使用正则表达式 - re模块 \ compile函数 \ group和groups方法 \ match方法 \ search方法 \ findall和finditer方法 \ sub和subn方法 \ split方法
135135
- [ ] 应用案例 - 使用正则表达式验证输入的字符串
136136

137-
#### Day13 - [进程和线程](./Day01-15/Day13/进程和线程.md)
137+
#### Day13 - [进程和线程](./Day01-15/Day13/进程和线程.md)
138138

139-
- 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
140-
- 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
141-
- 使用线程 - thread模块 / threading模块 / Thread类 / Lock类 / Condition类 / 线程池
139+
- [x]进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
140+
- [x]使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
141+
- [x]使用线程 - thread模块 / threading模块 / Thread类 / Lock类 / Condition类 / 线程池
142142

143143
#### Day14-A - [网络编程入门](./Day01-15/Day14-A/网络编程入门.md)
144144

‎day13/index.md‎

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Day13 - 进程和线程
2+
3+
## 概念
4+
5+
- 进程分配资源的基本单位
6+
- 一个进程可以包含多个线程
7+
- 线程是调度的基本单位
8+
9+
## 关于fork
10+
11+
- 用来创建进程
12+
- 调用 `fork()` 的是父进程
13+
- 创建出来的是子进程
14+
- 子进程是父进程的一个拷贝,但有自己的 PID
15+
- `fork()` 会返回两次
16+
- 父进程通过 `fork()` 返回值获取子进程 PID
17+
- 子进程中的返回值永远是 0
18+
19+
## Python 中的多进程
20+
21+
### 创建进程
22+
23+
- os 模块提供了 `fork()` 函数
24+
- multiprocessing 模块中的 `Process` 类可以用来创建子进程:启动进程 `start` 方法;等待进程执行结束:`join` 方法
25+
- 批量启动进程的进程池 `Pool`
26+
- 进程间通信队列 `Queue`
27+
- 管道 `Pipe`
28+
29+
### 进程间通信
30+
31+
- 使用 multiprocessing 模块中的 `Queue`(底层通过管道和信号量实现)
32+
33+
## Python 中的多线程
34+
35+
- threading 模块
36+
- 使用 `Tread` 类创建线程
37+
- 也可以继承 `Thread` 创建自己的线程类
38+
39+
```python
40+
from threading import Thread
41+
```
42+
43+
- Python 多线程并不能发挥 CPU 的多核特性
44+
45+
### 线程间通信
46+
47+
- 线程共享进程的内存空间
48+
- 实现
49+
- 设置全局变量用于共享
50+
- 注意"临界资源"的处理问题:加锁,只有获得缩的线程才能访问临界资源
51+
52+
```python
53+
from threading import Lock
54+
55+
lock = Lock()
56+
# 获取锁
57+
lock.acquire()
58+
# 释放锁
59+
lock.release()
60+
```
61+
62+
## 多进程还是多线程
63+
64+
- 无论是多线程还是多进程,数量过多都会导致效率下降
65+
- 操作系统切换线程和进程时需要:
66+
- 保存现场环境(CPU寄存器状态、内存页等)
67+
- 新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等)
68+
69+
## 单进程 + 异步 I/O
70+
71+
- 充分利用操作系统提供的异步 I/O 支持,可以使用单进程单线程执行多任务
72+
- 且看 Nginx
73+
- 单核 CPU 上采用单进程模型可以有效支持多任务
74+
- 在多核 CPU 上可以运行多个进程(数量与 CPU 核心数相同)
75+
- 单线程 + 异步 I/O 在 Python 中称为协程
76+
- 极高的执行效率
77+
- 子程序切换不是线程切换,而是由程序自身控制,因此没有线程切换的开销
78+
- 不需要多线程的锁机制。因为只有一个线程
79+
80+
## 案例

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /