关于while(1):pass为什么可以执行循坏外多进程的疑问?

问题描述

1,while(1)为什么可以执行循环体外的程序。
2,去掉while(1)为什么进程无法启动。

个人预期

程序从上到下执行,创建两个进程,同时调用函数,执行函数内的循环体,出错执行except,最后一直执行死循环while(1)。我尝试在while(1)里输出内容,结果程序不输出函数里的内容,只是死循环while(1)里的print。

import _thread
import time

# 为线程定义一个函数
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print ("%s: %s" % ( threadName, time.ctime(time.time()) ))

# 创建两个线程
try:
   _thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   _thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print ("Error: 无法启动线程")

while 1:
   pass

正常结果

Thread-1: Fri Jun 25 17:43:55 2021
Thread-2: Fri Jun 25 17:43:57 2021
Thread-1: Fri Jun 25 17:43:57 2021
Thread-1: Fri Jun 25 17:43:59 2021
Thread-2: Fri Jun 25 17:44:01 2021
Thread-2: Fri Jun 25 17:44:05 2021

去掉while(1):pass 的结果

进程已结束,退出代码 0

while(1)里添加print(‘死循环’)

循环
死循环
死循环
死循环
...
Jason990420
最佳答案

while True 为什么可以执行循环体外的程序。

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。

软件多线程。即便处理器只能运行一个线程,操作系统也可以通过快速的在不同线程之间进行切换,由于时间间隔很小,来给用户造成一种多个线程同时运行的假象。这样的程序运行机制被称为软件多线程。如微软的Windows作业系统和Linux就是在各个不同的线程间来回切换,被称为单人多任务作业系统。而DOS这类文字接口作业系统在一个时间只能处理一项工作,被视为单人单工作业系统。

除此之外,许多系统及处理器也支持硬件多线程技术。对称多处理机(SMP)系统具有多个处理器,所以具有真正的同时执行多个线程的能力;CMP技术通过在一块芯片上集成多个核心(Core)也具有真正的多线程能力;CMT技术则稍有不同,有的是依靠硬件执行线程切换来获得多线程能力,操作系统不再负责线程切换,因而这部分开销可以减少甚至消除,这方面典型的例子是Sun的UltraSPARC T1,它同时综合了CMP和CMT。微软的Windows 2000以后的操作系统皆支持多线程与超线程技术。

去掉 while True 为什么进程无法启动。(后面没代码了, 代表主线程结束)

当主线程退出时,由系统决定其他线程是否存活。在大多数系统中,这些线程会直接被杀掉。

2年前 评论
Jason990420 (作者) 2年前
huanhaifeihua (楼主) 2年前
讨论数量: 1
Jason990420

while True 为什么可以执行循环体外的程序。

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。

软件多线程。即便处理器只能运行一个线程,操作系统也可以通过快速的在不同线程之间进行切换,由于时间间隔很小,来给用户造成一种多个线程同时运行的假象。这样的程序运行机制被称为软件多线程。如微软的Windows作业系统和Linux就是在各个不同的线程间来回切换,被称为单人多任务作业系统。而DOS这类文字接口作业系统在一个时间只能处理一项工作,被视为单人单工作业系统。

除此之外,许多系统及处理器也支持硬件多线程技术。对称多处理机(SMP)系统具有多个处理器,所以具有真正的同时执行多个线程的能力;CMP技术通过在一块芯片上集成多个核心(Core)也具有真正的多线程能力;CMT技术则稍有不同,有的是依靠硬件执行线程切换来获得多线程能力,操作系统不再负责线程切换,因而这部分开销可以减少甚至消除,这方面典型的例子是Sun的UltraSPARC T1,它同时综合了CMP和CMT。微软的Windows 2000以后的操作系统皆支持多线程与超线程技术。

去掉 while True 为什么进程无法启动。(后面没代码了, 代表主线程结束)

当主线程退出时,由系统决定其他线程是否存活。在大多数系统中,这些线程会直接被杀掉。

2年前 评论
Jason990420 (作者) 2年前
huanhaifeihua (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!