network专栏 02.进程与线程 02.线程 01.线程理论

"""
进程:资源单位,在内存空间中开辟一块独立的空间
线程:执行单位,不会开辟空间,去所在的进程获取资源
进程与线程都是虚拟单位
开设进程比开设线程更加消耗资源

多线程:多IO操作时开启 更加节省资源
多进程:多计算操作时开启 同时进行计算

通常在项目中,是多进程下开设多线程
"""
"""
开设线程不需要在main方法下面,但是习惯将其写在main方法下
同一个进程下的线程,会共享该进程下的全局数据
先开启的进程,未必先结束

"""
from threading import Thread, active_count, current_thread
import time


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


if __name__ == '__main__':
    t = Thread(target=task, args=('苏轼', ))
    t.start()
    # 主线程等待子线程运行完毕才会运行
    t.join()
    print('it is main')

# 创建线程的速度高于进程,因此在主线程前的代码会优先执行
# 苏轼 is start
# it is main
# 苏轼 is over


class MyThread(Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        # 当前线程的名字
        print(f'{self.name} is start')
        time.sleep(1)
        print(f'{self.name} is over')


if __name__ == '__main__':
    t = MyThread('李白')
    t.start()

    # 获取当前线程的名字
    print(current_thread().name)
    # MainThread

    # 统计当前正在活跃的线程数
    print(active_count())
    # 2
from threading import Thread
import time


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


if __name__ == '__main__':
    t = Thread(target=task, args=('苏轼', ))
    # 将线程设置为守护线程
    # 当主线程关闭后,守护线程随之关闭
    t.daemon = True
    t.start()
    print('it is main')


# 苏轼 is start
# it is main
"""
协程[非官方概念]:单线程情况下实现并发
效果:程序没有IO,遇见IO,立即切换
在代码层面进行调整,让CPU看不到IO,从而持续占用CPU资源
IO时切会提升效率,计算时切会降低效率

切换未必就能提升效率,因为来回切换也需要时间

"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值