进程和线程

什么是进程、线程?

①进程:Process;线程:Thread;

②进程是OS分配资源的最小单元,线程是OS调度的最小单元;

③一个程序至少包括一个进程,一个进程至少包括一个线程;线程的尺度更小

④进程执行过程中拥有独立内存单元,不同进程间的内存单元互不干涉;

一个进程中的多个线程在执行过程中共享内存。

进程是资源分配的最小单位,线程是CPU调度的最小单位

例如打开QQ音乐是一个进程,在QQ音乐里面听歌是一个线程,在QQ音乐里面下载是一个线程,听歌和下载是可以同时进行的(多个线程)。

打开QQ音乐之后,还可以打开office,微信等,每个应用相当于一个进程,多个应用同时打开是多进程。

以下以python多进程(Multiprocessing)和多线程(Threading)为例

常规代码

#!/usr/bin/env python3
# encoding: utf-8
'''常规代码,不使用线程'''

import time


def test(q):
	time.sleep(1)
	print(q)


def main():
	for i in range(4):
		name = 'thread' + str(i)
		test(name)	

	print(f'done')

if __name__ == '__main__':
	start_time = time.time()
	main()
	end_time = time.time()
	print(f'total time >>>{end_time - start_time}')

以上代码执行完成需要花费4s左右

1、多线程(Threading)

多线程代码

#!/usr/bin/env python3
# encoding: utf-8
'''线程'''


import threading
from queue import Queue
import time


def test(q):
	time.sleep(1)
	row = q.get()
	print(row)


def main():
	w = []
	q = Queue()
	for i in range(4):
		name = 'thread' + str(i)
		q.put(name)
		t = threading.Thread(target = test, name=name, args=(q, ))
		t.start()
		w.append(t)

	for th in w:
		th.join()

	print(f'done')


if __name__ == '__main__':
	start_time = time.time()
	main()
	end_time = time.time()
	print(f'total time >>>{end_time - start_time}')

以上代码执行完成花费1s左右

2、多进程(Multiprocessing)

多进程代码

#!/usr/bin/env python3
# encoding: utf-8
'''进程'''


import multiprocessing
import time


def test(q):
	time.sleep(1)
	row = q.get()
	print(row)


def main():
	w = []
	q = multiprocessing.Queue()
	for i in range(4):
		name = 'thread' + str(i)
		q.put(name)
		t = multiprocessing.Process(target = test, name=name, args=(q, ))
		t.start()
		w.append(t)

	for th in w:
		th.join()

	print(f'done')


if __name__ == '__main__':
	start_time = time.time()
	main()
	end_time = time.time()
	print(f'total time >>>{end_time - start_time}')

以上代码执行完成花费1s左右

This entry was posted in 应用. Bookmark the permalink.

发表评论