java gil_Python随笔(二)GIL

GIL(global interpreter lock)是Python一个非常让人蛋疼的问题,它的存在直接影响了对Python并发线程的性能调优。 这里我搬一个测试出来看看运行时间

from threading import Thread

import time

times=5

num=99999999#8个9

def counter():

i = 0

for _ in range(num):

i = i + 1

return True

def test_counter_1():

thread_array = {}

start_time = time.time()

for tid in range(times):

thread = Thread(target=counter)

thread.start()

thread.join()

end_time = time.time()

print("单线程用时: {}".format(end_time - start_time))

def test_counter_2():

thread_array = {}

start_time = time.time()

for tid in range(times):

thread = Thread(target=counter)

thread.start()

thread_array[tid] = thread

for i in range(times):

thread_array[i].join()

end_time = time.time()

print("多线程用时: {}".format(end_time - start_time))

if __name__ == '__main__':

test_counter_1()

test_counter_2()

test_counter_1是单线程执行五次test_counter_2是5个线程"同时"执行

看看我们的输出

ee94bf5da535d2db0b7bef06d37df080.png

和预想中的不一样,5个线程同时执行,相当于每条线程只执行一次,缺比单线程五次多了整整1S多线程多出了单线程103%的时间

同样的思想我们来看看C++的执行结果

//

// Created by Pulsar on 2019/3/30.

//

#include

#include

#include

void *counter(void *arg){

long long i = 0;

for(;i<99999999;){

i+=1;

}

// std::cout<

return nullptr;

}

int main(int argc,char **argv){

clock_t start_time_1,end_time_1,start_time_2,end_time_2;

start_time_1=clock();

// 单线程多次执行

for(int i=0;i<5;i+=1){

counter(nullptr);

}

end_time_1=clock();

std::cout<

// 多线程一次执行

start_time_2=clock();

pthread_t thread_id_array[5];

for(int i=0;i<5;i+=1){

int error =pthread_create(&thread_id_array[i],NULL,counter,NULL);

if(error!=0){

std::cout<

}

}

for(int i=0;i<5;i+=1){

pthread_join(thread_id_array[i],NULL);

}

end_time_2=clock();

std::cout<

getchar();

return 0;

}

9d9a2b30591dbe8052f9448cf29ba538.png

真是令人头秃,没有对比没有伤害

233281c0cdc0a06d3f9fe04b797468d2.png

参考文献:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值