在现代计算架构中,CPU核心的数量对于多任务处理能力至关重要。例如,一个拥有16个核心的机器可以同时执行16个操作。这种在多个核心上同时执行任务的能力被称为并行计算,是现代计算机架构的关键优势之一。
线程是一组需要执行的操作。线程将被分配到CPU的一个核心上。注意,一个线程只能在一个核心上运行,不能在核心之间转移或切换。如果将两个线程分配给一个核心,核心一次只能做一件事。现在可以按照想要的方式处理这两个线程。首先,可以处理第一个线程的一半。现在可以处理下一个线程的一半。以此类推,这就是线程的本质——它展示了如何在同一个CPU核心上运行不同的事情。简而言之,线程是关于如何在核心上安排程序集(线程)的执行顺序。
有时,一个线程可能会挂起,这意味着它在那个时间点应该是空闲的。最好的例子是time.sleep()函数,它什么也不做,只是等待给定的时间。当一个线程处于空闲/挂起状态时,可以继续处理另一个线程,直到前一个线程再次活跃。这就是所谓的并发计算。
以一个现实世界的例子来解释这个概念总是有帮助的。I/O操作是可以从线程中受益的。假设在Netflix上观看《肖申克的救赎》。当观看安迪·杜佛兰在监狱中受苦时,发生了两件事——一是应用程序从服务器获取数据,二是获取的数据像电影一样显示在屏幕上。
import threading
import time
def sleepy_man(secs):
print('开始睡眠内部')
time.sleep(secs)
print('醒来内部')
x = threading.Thread(target = sleepy_man, args = (10,))
x.start()
print(threading.activeCount())
time.sleep(1.2)
print('完成')
输出结果将是:
开始睡眠内部
2
完成
醒来内部
import threading
import time
def sleepy_man(secs):
print('开始睡眠内部 - 迭代 {}'.format(5-secs))
time.sleep(secs)
print('醒来内部 - 迭代 {}'.format(5-secs))
for i in range(3):
x = threading.Thread(target = sleepy_man, args = (5-i,))
x.start()
print('活跃线程数- ', threading.activeCount())