:验证GIL的存在、特点、验证python多线程是否有用、死锁现象、信号量、event事件、进程池与线程池、协程

本文验证了Python的全局解释器锁(GIL)的存在和特点,指出在多CPU的IO密集型任务下,多线程依然有用。讨论了死锁现象,并介绍了信号量和Event事件作为同步机制。还探讨了进程池和线程池的理论,并重点阐述了协程的概念、应用以及如何实现TCP服务端并发。
摘要由CSDN通过智能技术生成

验证GIL的存在

GIL的存在使得同一个进程下的多个线程无法同时执行

from threading import Thread

money = 100
def task():
    global money
    money -= 1
t_list = []
for i in range(100):
    t = Thread(target=task)
    t.start()
    t_list.append(t)
for t in t_list:
    t.join()
print(money)  # 0

ps:加入t_list列表添加线程对象,是为了保证所有的线程执行完了之后,才执行查看最后的money

验证GIL的特点

GIL不会影响程序层面的数据,也不会保证它的修改是安全的,要想保证自己程序的数据安全,得自己加锁

from threading import Thread
import time

money = 100
def task():
    global money
    tmp = money
    time.sleep(0.1)
    money  = tmp - 1
    
t_list = []
for i in range(100):
    t = Thread(target=task)
    t.start()
    t_list.append(t)
for t in t_list:
    t.join()
    
print(money)  # 99
from threading import Thread,Lock
import time

money = 100
mutex = Lock()

def task():
    mutex.acquire()
    global money
    tmp = money
    time.sleep(0.1)
    money  = tmp - 1
    mutex.release()
    
t_list = []
for i in range(100):
    t = Thread(target=task)
    t.start()
    t_list.append(t)
for t in t_list:
    t.join()
    
print(money)  # 0

验证python多线程是否有用

python的多线程确实无法使用多核优势 但是在IO密集型的任务下是有用的

验证python多线程是否有用,需要分两种情况:第一种:是单个cpu还是多个CPU;第二种:是IO密集型(代码有IO操作),计算密集型(代码没有IO操作);根据这两种情况,可得出以下结论

1.单个CPU
	1.1 IO密集型:多线程有优势
    	多进程:申请额外的空间,消耗更多的资源
        多线程:消耗资源相对较少,可以通过多道技术,提升CPU的效率
	1.2 计算密集型:多线程有优势
    	多进程:申请额外的空间,消耗更多的资源(总耗时+申请空间+拷贝代码+切换)
        多线程:消耗资源相对较少,通过多道技术(总耗时+切换)

2.多个CPU
	2.1 IO密集型:多线程有优势
    	多进程:总耗时(单个进程耗时+IO操作+申请空间+拷贝代码)
		多线程:总耗时(单个进程的耗时+IO)
	2.2 计算密集型:多进程有优势
    	多进程:总耗时(单个进程耗时+IO操作+申请空间+拷贝代码)
		多线程:总耗时(多个进程的综合)

验证:在多个CPU且IO密集型的情况

在多核CPU且IO密集型的情况下,多线程有优势

多进程:
from multiprocessing import Process
import time

def work():
    time.sleep(2)  # 模拟纯IO操作
if __name__ == '__main__':
    start_time = time.time()
    p_list = []
    for i in range(100):
        p = Process(target=work)
        p.<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值