xzyl的博客

沉淀,分享

0%

Python之进程与线程

进程与线程是操作系统中非常重要的内容,也是程序员应该牢记于心的知识。

进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的基本单位.

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

进程与线程的区别

从上面的两者的描述我们可以看出,进程是系统分配资源的基本单位,而线程是CPU调度的基本单位,也就是说其实真正干活的是线程,进程只是提供一些系统资源给线程。进程下可以有多个线程,多个线程共享进程资源。
打个比方,工厂中的车间就相当于进程,里面有生产某项产品(任务)所需的原料(系统资源)。车间里面有很多工人(线程),一起工作以完成生产任务。

使用

对于进程和线程的使用,在Python中可以分别选择multiprocess和threading库。

进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time
import os
from multiprocessing import Process


def greet():
print(f"{time.time()}:hello from {os.getpid()}(parent: {os.getppid()})")
time.sleep(2)
print(f"{time.time()}:bye from {os.getpid()}(parent: {os.getppid()})")


if __name__ == "__main__":
proc_list = [
Process(target=greet, args=(f"Process-{index}",)) for index in range(1, 5)
]
for proc in proc_list:
proc.start()

for proc in proc_list:
proc.join()

线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os
import time
from threading import Thread


def greet():
print(f"{time.time()}:hello from {os.getpid()}(parent: {os.getppid()})")
time.sleep(2)
print(f"{time.time()}:bye from {os.getpid()}(parent: {os.getppid()})")


if __name__ == "__main__":
thread_list = [
Thread(target=greet, args=(f"Thread-{index}",)) for index in range(1, 5)
]
for thread in thread_list:
thread.start()

for thread in thread_list:
thread.join()

print("end")