##########多线程与多进程的区别################ ##########多线程。例如:一个QQ中有几个聊天窗口############ ##########多进程。例如:电脑上同时开着QQ与微信。QQ与微信分别是不同的进程########### ###进程是指在系统中正在运行的一个应用程序,是资源分配的最小单位。 ###线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。例如QQ不同的聊天窗口。 ###区别一:所有在同一个进程里的线程,是同享同一块进程所占的内存空间。进程的内存是独立的。【内存区别】 ###区别二:同一个进程里的线程之间可以直接访问。两个进程想通信必须通过一个中间代理来实现。【通信区别】 ###区别三:线程无法利用多核CPU【CPU区别】 ###区别四:多线程任务适用于IO密集型任务(例如web服务),多进程任务适用于CPU密集型任务(例如训模型通常有8卡GPU)######### ##########GIL锁:即全局解释锁(Global Interpreter Lock),用来阻止同一个进程下多个线程的同时执行即保证一个进程的某个时刻只有一个线程在运行。因此,每个线程在调用 cpython 解释器 在运行之前,需要先抢到 GIL 锁,然后才能运行。 ##########python实现线程########### import threading,time##########线程 import multiprocessing###########进程 def function_test(x): print(x) count=0 for i in range(1000000): count+=1 print(count) if __name__ == '__main__': t1=threading.Thread(target=function_test,name="线程的名字",args=("target函数的参数",))#################初始化一个线程对象 start_time = time.time() t1.start()################启动一个线程######### t1.join()##########当前线程阻塞,等待t1线程执行完成######### print("一个线程完成时间:",time.time()-start_time) start_time=time.time() function_test("只有主线程调用函数function()") print("主线程完成时间:",time.time()-start_time) print("This is main fuction") p1=multiprocessing.Process(target=function_test,args=("进程target函数的参数",))####################初始化一个进程对象 p1.start()
多线程与多进程及其GIL锁
于 2022-09-25 20:04:08 首次发布