python 进程 线程????

进程、线程、协程对比
进程是操作系统资源分配的单位
线程是CPU调度的单位
进程切换需要的资源最大,效率很低
线程切换需要的资源一般,效率一般(当然在不考虑GIL的情况下)
协程切换任务资源小,效率高
多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中,所以是并发
同步和异步
异步:调用在发出之后,这个调用就直接返回,不管有无结果:异步是过程
非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

同步异步的区别
同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,要么失败都失败,
服务的状态可以保持一致
异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。被依赖的服务是
否最终完成无法确定,因此他是一个不可靠的服务序列

消息通知中的同步和异步:
同步:当一个同步调用发出后,调用者一直等待返回消息(或者调用结果)通知后,才能进行后续的执行
异步:当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。在调用结束之后,通过消息回调来通知调用者是否调用成功。

阻塞和非阻塞区别:
阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后,才会返回
非阻塞:非阻塞和阻塞的结果相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

同步与异步是对应的,他们是线程之间的关系,两个线程之间要么是同步的,要么是异步的

阻塞与非阻塞是同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。

阻塞是使用同步机制的结果,非阻塞则是使用异步机制的结果

import time,threading

def dance():
    for i in range(3):
        time.sleep(0.5)
        print("正在跳舞")
def sing():
    for i in range(3):
        time.sleep(0.8)
        print('正在唱歌')

t1 = threading.Thread(target=dance)
t2 = threading.Thread(target=sing)

t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
time.sleep(1)
print("时间结束。ending")

# 正在跳舞
# 正在唱歌
# 时间结束。ending
# ------run------- 0
# ------run------- 1
# ------run------- 2
# 正在跳舞

-getName() 获取线程的名称
-setName() 设置线程的名称
-isAlive() 判断当前线程存活状态

import time,threading

def dance():
    for i in range(3):
        time.sleep(0.8)
        print('正在跳舞')

def sing():
    for i in range(3):
        time.sleep(0.8)
        print("正在唱歌")

t1 = threading.Thread(target=dance)
t2 = threading.Thread(target=sing)
t1.setName('线程1')
# t2.setName('线程2')
print(t1.is_alive())
t1.start()
print(t1.is_alive())
t2.start()
print(t1.getName())
print(t2.getName())

# False
# True
# 线程1
# Thread-2
# ------run------- 0
# ------run------- 1
# ------run------- 2
# 正在跳舞
# 正在唱歌
# 正在唱歌
# 正在跳舞
# 正在唱歌
# 正在跳舞

threading.currentThread():返回当前的线程变量
threading.enumrate(): 返回一个包含正在运行的线程list,正在运行线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount():返回正在运行的线程数量,与len(threading.enumrate())有相同的结果

import threading,time

def dance():
    print('dance',threading.current_thread())
    for i in range(3):
        time.sleep(0.5)
        print('正在跳舞')
def sing():
    print('sing',threading.current_thread())
    for i in range(3):
        time.sleep(0.5)
        print('正在唱歌')

t1 = threading.Thread(target=dance)
t2 = threading.Thread(target=sing)

print(threading.current_thread())
# print(threading.enumerate())
t1.start()
t2.start()

print('启动后的线程列表-->',threading.enumerate())
print(threading.active_count())
print(len(threading.enumerate()))

# <_MainThread(MainThread, started 1536)>
# dance <Thread(Thread-1, started 2000)>
# sing <Thread(Thread-2, started 10484)>
# 启动后的线程列表--> [<_MainThread(MainThread, started 1536)>, <Thread(Thread-1, started 2000)>, <Thread(Thread-2, started 10484)>]
# 3
# 3
# 正在唱歌
# 正在跳舞
# 正在唱歌
# 正在跳舞
# 正在唱歌
# 正在跳舞
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值