博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程模型
阅读量:5937 次
发布时间:2019-06-19

本文共 2144 字,大约阅读时间需要 7 分钟。

多线程模型

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

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

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

1、用循环的例子来引入多线程的效率提示
2、抢占式多线程带来资源竞争问题
3、资源竞争问题的解决办法之一,锁
4、线程切换也是一种开销,并不是所有的都适用多线程
5、线程的创建销毁也是一笔不小的开销,线程池的实现
6、不同语言C,C++,JAVA,PYTHON对1、2、3、4、5问题的处理

一、python篇

1、循环执行任务使得效率低下演示

import timedef 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=1Elapsed time: 9.04143500328064

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

from threading import Threadclass 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=2Elapsed time: 2.0126969814300537end time: [2015-11-10 13:09:32]

3、由于抢占式多线程使得资源竞争--无逾期效果-演示

4、由于抢占式多线程使得资源竞争--无逾期效果-锁修复演示

5、线程频繁创建导致开销大之系统线程池的使用

6、线程频繁创建导致开销大之自己实现线程池

7、待处理数据任务排队的一般解决方案队列

转载于:https://www.cnblogs.com/luomgf/p/4951654.html

你可能感兴趣的文章
微软软件开发技术二十年回顾-API篇(转)
查看>>
多行文本溢出显示省略号
查看>>
[Android Pro] http请求中传输base64出现加号变空格的解决办法
查看>>
Simpson公式的应用(HDU 1724/ HDU 1071)
查看>>
逆波兰表达式
查看>>
[BeiJing2006]狼抓兔子
查看>>
[SDOI2011]染色
查看>>
单页应用和多页应用
查看>>
jsp 页面导出excel时字符串数字变成科学计数法的解决方法
查看>>
docker
查看>>
sql 删除约束
查看>>
操作系统-输入输出系统
查看>>
C#引用非托管.dll
查看>>
MySQL 自适应哈希索引
查看>>
Markdown使用Demo
查看>>
跳过丢失归档进行恢复
查看>>
iOS 最新公布app到AppStore全流程具体解释
查看>>
正面模式(门面模式)-鼠标画地图实例
查看>>
项目中使用的spring 注解说明
查看>>
Bootstrap模态框添加滚动条(一级)
查看>>