首页 > 其他分享 >线程相关知识

线程相关知识

时间:2022-11-21 20:48:18浏览次数:48  
标签:start 知识 list 耗时 线程 time 进程 相关

线程理论

进程
	进程其实是资源单位,表示一块内存空间
线程
	线程才是执行单位,表示真正的代码指令

我们可以将进程比喻是车间,线程是车间里面的流水线
一个进程内部至少含有一个线程

1.一个进程内可以开设多个线程
2.同一个进程下的多个线程数据是共享的
3.创建进程与线程的区别
	创建进程的消耗要远远大于线程

创建线程的两种方式

from threading import Thread
from multiprocessing import Process
import time


def task(name):
    print(f'{name} is running')
    time.sleep(0.1)
    print(f'name is over')


if __name__ == '__main__':
    start_time = time.time()
    p_list = []
    # for i in range(100):
    #     p = Process(target=task, args=(f'用户{i}',))
    #     p.start()
    #     p_list.append(p)
    # for p in p_list:
    #     p.join()
    print(time.time() - start_time)  # 进程执行的时间1.2412874698638916
    t_list = []
    for i in range(100):
        t = Thread(target=task, args=('用户%s'%i,))
        t.start()
        t_list.append(t)
    for t in t_list:
        t.join()
    print(time.time() - start_time)  # 线程执行的时间0.11986708641052246


"""
创建线程无需考虑反复执行的问题
"""
第二种方式:
class MyThread(Thread):
    def run(self):
        print('run is running')
        time.sleep(1)
        print('run is over')
obj = MyThread()
obj.start()
print('主进程')
"""
执行顺序
run is running、主进程、run is over
"""

线程的诸多特性

1.join方法
2.同进程内多个线程数据共享
3.current_thread()
4.active_count()

python多线程是否有用

需要分情况
	情况1
    	单个CPU
       多个CPU
   	情况2
    	IP密集型(代码有IO操作)
       计算密集型(代码没有IO)
1.单个CPU
	IO密集型
    	多进程
        申请额外的空间 消耗更多的资源
       多线程
    	  消耗资源相对较少,通过多道技术
     ps:多线程有优势
   计算密集型
   		多进程
    		申请额外的空间,消耗更多的资源(总耗时 + 申请空间+拷贝代码+切换)
        多线程
        	消耗资源相对较少,通过多道技术(总耗时+切换)
     ps:多线程有优势
2.多个CPU
	IO密集型
   		多进程
         总耗时(单个进程的耗时+IO+申请空间+拷贝代码)
       多线程
    	  总耗时(单个进程的耗时+IO)
       ps:多线程有优势!!!
	计算密集型
    	多进程
       	  总耗时(单个进程的耗时)
    	多线程
          总耗时(多个进程的综合)
       ps:多进程完胜!!!        2.多个CPU
	IO密集型
   		多进程
         总耗时(单个进程的耗时+IO+申请空间+拷贝代码)
       多线程
    	  总耗时(单个进程的耗时+IO)
       ps:多线程有优势!!!
	计算密集型
    	多进程
       	  总耗时(单个进程的耗时)
    	多线程
          总耗时(多个进程的综合)
       ps:多进程完胜!!!
        
        
from threading import Thread
from multiprocessing import Process
import os
import time


def work():  # 计算密集型
    res = 1
    for i in range(1, 10000):
        res *= i


if __name__ == '__main__':
    print(os.cpu_count())  # 查看当前计算机CPU的个数
    start_time = time.time()
    p_list = []
    for i in range(12):  # 一次性创建12个进程
        p = Process(target=work)
        p.start()
        p_list.append(p)
    for p in p_list:
        p.join()   # 让主进程等待全部子进程结束
    print('总耗时:%s' % (time.time() - start_time))
    t_list = []
    for i in range(12):
        t = Thread(target=work)
        t.start()
        t_list.append(t)
    for t in t_list:
        t.join()
    print('总耗时:%s' % (time.time() - start_time))
"""
计算密集型
    多进程:0.19
    多线程:0.43
"""

def work():
    time.sleep(2)   # 模拟纯IO操作


if __name__ == '__main__':
    start_time = time.time()
    t_list = []
    for i in range(100):
        t = Thread(target=work)
        t.start()
    for t in t_list:
        t.join()
    print('总耗时:%s' % (time.time() - start_time))
    p_list = []
    for i in range(100):
        p = Process(target=work)
        p.start()
    for p in p_list:
        p.join()
    print('总耗时:%s' % (time.time() - start_time))

IO密集型
    多线程:0.00800013542175293
    多进程:0.7761733531951904
"""

标签:start,知识,list,耗时,线程,time,进程,相关
From: https://www.cnblogs.com/zhanghong1229/p/16913114.html

相关文章

  • 进程池与线程池
    进程和线程是不可以无限制的创建因为硬件的发展赶不上软件,有物理极限,如果我们在编写代码的过程中无限制的创建进程或者线程会导致计算机崩溃池 降低程序的执行效率,但是......
  • 温故而知新——java知识,主要是io流体系
    多态多态的使用:总结:方法的重载static修饰变量和方法工具类重新认识main方法在‘EditConfiguration’中配置args(了解即可)代码块抽象类接口、父类、多......
  • python之路32 网络并发线程方法 线程池 协程
    多进程实现TCP服务端并发服务端:importsocketfrommultiprocessingimportProcessdefget_server():server=socket.socket()server.bind(('127.0.0.1'......
  • 进入python的世界_day35_网络编程——线程相关知识、GIL锁,互斥锁、event事件、池子、
    上周五作业——多进程实现TCP服务端并发#服务端importsocketfrommultiprocessingimportProcessdefget_server():server=socket.socket()server.bi......
  • Eureka基础知识
    1、什么是服务治理SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较......
  • 互斥锁、线程
    今日内容概要多进程实现TCP服务端并发互斥锁代码实操线程理论创建线程的多种方式线程join方法守护线程线程诸多方法GIL全局解释器锁今日内容详情多进程实......
  • 并发编程3 线程
    多进程实现TCP服务端并发importsocketfrommultiprocessingimportProcessdefget_server():server=socket.socket()server.bind(('127.0.0.1',8081)......
  • C# 简单实现线程池
    NET6环境开发 实现线程数量,任务队列,非核心线程,及核心线程活跃时间的管理。namespaceCustomThreadPool;///<summary>///线程池类///</summary>publicclassT......
  • 多线程与线程池知识点
    多线程https://www.cnblogs.com/empty-me/p/15664024.htmlJava多线程:向线程传递参数的三种方法......
  • 线程理论
    今日内容详细互斥锁代码实操锁:建议只加载操作数据的部分否则整个程序的效率会很低defsearch(name):withopen(r'joyce.txt','r',encoding='utf8')asf:......