多线程模型

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

多线程模型线程是一个有意思的话题,在工作中也经常面临,故列个提纲,后续写一下.

有一些方面还不熟悉,希望通过书写让思路更加清晰。

从几个方面来探讨多线程问题

1、用循环的例子来引入多线程的效率提示

2、抢占式多线程带来资源竞争问题

3、资源竞争问题的解决办法之一,锁

4、线程切换也是一种开销,并不是所有的都适用多线程

5、线程的创建销毁也是一笔不小的开销,线程池的实现

6、不同语言C,C++,java,PYTHON对1、2、3、4、5问题的处理

一、python篇1、循环执行任务使得效率低下演示import time

def timstr(ltime=None):

return time.strftime("[%Y-%m-%d %H:%M:%S]",time.localtime(ltime))

def work_task(args,cnt=2):

time.sleep(cnt)PRint("%s\targs=%s,cnt=%d\n" % (timstr(),args,cnt))

return

def main1():

start = time.time()

for x in range(1,10):

work_task(cnt=1,args=x)

print("Elapsed time: %s" % (time.time()-start))

main1()

[2015-11-10 13:08:24]args=1,cnt=1

[2015-11-10 13:08:25]args=2,cnt=1

[2015-11-10 13:08:26]args=3,cnt=1

[2015-11-10 13:08:27]args=4,cnt=1

[2015-11-10 13:08:28]args=5,cnt=1

[2015-11-10 13:08:29]args=6,cnt=1

[2015-11-10 13:08:30]args=7,cnt=1

[2015-11-10 13:08:31]args=8,cnt=1

[2015-11-10 13:08:32]args=9,cnt=1

Elapsed time: 9.04143500328064

2、多线程开启使得批量任务的执行时间和单次一样演示from threading import Thread

class GetThread(Thread):

def __init__(self, index):

self.index = index

super(GetThread, self).__init__()

def run(self):

work_task(self.index,cnt=2)

return

def main2():

start = time.time()

threads = []

for index in range(1,10):

t=GetThread(index);

threads.append(t)

t.start()

for t in threads:

t.join()

print("Elapsed time: %s" % (time.time()-start))

print("start time: %s\n" % (timstr()))

main2()

print("end time: %s\n" % (timstr()))

start time: [2015-11-10 13:09:30]

[2015-11-10 13:09:32]args=1,cnt=2

[2015-11-10 13:09:32]args=4,cnt=2

[2015-11-10 13:09:32]args=2,cnt=2

[2015-11-10 13:09:32]args=3,cnt=2

[2015-11-10 13:09:32]args=5,cnt=2

[2015-11-10 13:09:32]args=6,cnt=2

[2015-11-10 13:09:32]args=7,cnt=2

[2015-11-10 13:09:32]args=8,cnt=2

[2015-11-10 13:09:32]args=9,cnt=2

Elapsed time: 2.0126969814300537

end time: [2015-11-10 13:09:32]

3、由于抢占式多线程使得资源竞争--无逾期效果-演示4、由于抢占式多线程使得资源竞争--无逾期效果-锁修复演示5、线程频繁创建导致开销大之系统线程池的使用6、线程频繁创建导致开销大之自己实现线程池7、待处理数据任务排队的一般解决方案队列

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航