線程是一個有意思的話題,在工作中也經常面臨,故列個提綱,后續寫一下.
有一些方面還不熟悉,希望通過書寫讓思路更加清晰。
從幾個方面來探討多線程問題
1、用循環的例子來引入多線程的效率提示
2、搶占式多線程帶來資源競爭問題
3、資源競爭問題的解決辦法之一,鎖
4、線程切換也是一種開銷,并不是所有的都適用多線程
5、線程的創建銷毀也是一筆不小的開銷,線程池的實現
6、不同語言C,C++,java,PYTHON對1、2、3、4、5問題的處理
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.04143500328064from 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]新聞熱點
疑難解答