zoukankan      html  css  js  c++  java
  • 多线程模型

    多线程模型

    线程是一个有意思的话题,在工作中也经常面临,故列个提纲,后续写一下.
    有一些方面还不熟悉,希望通过书写让思路更加清晰。

    从几个方面来探讨多线程问题
    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	args=%s,cnt=%d
    " % (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
    " % (timstr()))
    main2()    
    print("end time: %s
    " % (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、待处理数据任务排队的一般解决方案队列

  • 相关阅读:
    XPath在python中的高级应用
    Python中 sys.argv[]的用法简明解释
    python format
    爬虫解析:XPath总结
    c#attribute特性
    .net随笔--不好归类的
    windows系统操作
    linux学习
    visual studio各种新建项目和新建项简介
    自定义界面和控件--基础
  • 原文地址:https://www.cnblogs.com/luomgf/p/4951654.html
Copyright © 2011-2022 走看看