进程与线程

进程与线程

进程:操作系统中一个任务就是一个进程(如qq,微信,windows的任务管理器里的任务)

线程:一个进程有很多线程,每个线程做一件事(qq既可以聊天也可以视频)

一个进程中至少有一个线程,如果有多个线程,就是我们俗称的多线程

单核cpu计算机也可以实现多进程和多线程,他只是在不断的切换线程(cpu的执行速度很快,所以切换的速度非常快)

线程和进程切换由操作系统来决定

多线程的问题:

线程不安全:多线程中,变量是共享的,多个线程同时操作一个变量会引发变量的数据异常

GIL全局解释锁:每个进程一把锁,启动线程先加锁,结束线程释放锁,虽然解决了变量的问题,但对性能有影响,但也不是对所有的性能都有影响

复杂程序的分类:

cpu密集型

io密集型(大量的文件读写)

 

io耗时越长,多线程效率越高(即io密集型任务下,gil全局解释锁效率还是很高的)

 

单线程与多线程的效率对比:

import threading
import time

#假设这是网络程序,请求数据
def request_data():
    time.sleep(0.02)#模拟网络操作

def main_single_thread():
    for i in range(100):
        request_data()

def main_multi_threads():
    thread_list = []
    for i in range(100):
        t = threading.Thread(target=request_data)
        t.start()
        thread_list.append(t)
    #如果前面代码没有完成,他就一直阻塞在这
    #这样就能求出一百个线程中最慢的那个时间
    for i in thread_list:
        i.join()

if __name__ == '__main__':
    #单线程时间计算
    start_time = time.time()
    main_single_thread()
    end_time = time.time()
    print('单线程耗时:{:.4f}s'.format(end_time - start_time))

    #多线程时间计算
    start_time = time.time()
    main_multi_threads()
    end_time = time.time()
    print("多线程耗时:{:.4f}s".format(end_time-start_time))

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值