- A+
什么叫“多任务”呢?简单地说,就是操作系统可以同时运⾏多个任务。比如⼀边在⽤浏览器上⽹,⼀边在听MP3,⼀边在⽤Word写文档,这就 是多任务,⾄少同时有3个任务正在运⾏。还有很多任务悄悄地在后台同时运 ⾏着,只是桌⾯上没有显示⽽已。
时间片轮转
现在,多核CPU已经⾮常普及了,但是,即使过去的单核CPU,也可以执⾏ 多任务。由于CPU执⾏代码都是顺序执⾏的,那么,单核CPU是怎么执⾏多 任务的呢? 答案就是操作系统轮流让各个任务交替执⾏,任务1执⾏0.01秒,切换到任务 2,任务2执⾏0.01秒,再切换到任务3,执⾏0.01秒……这样反复执⾏下去。 表⾯上看,每个任务都是交替执⾏的,但是,由于CPU的执⾏速度实在是太 快了,我们感觉就像所有任务都在同时执⾏⼀样。
真正的并⾏执⾏多任务只能在多核CPU上实现,但是,由于任务数量远远多 于CPU的核⼼数量,所以,操作系统也会⾃动把很多任务轮流调度到每个核 ⼼上执⾏。
进程
进程是指在操作系统中正在运行的一个应用程序,
Fork()
Python的os模块封装了常⻅的系统调⽤,其中就包括fork,可以在Python程 序中轻松创建⼦进程:
# 注意,fork()函数,只在Unix/Linux/Mac上运⾏,windows不可以
import os
ret =os.fork() #创建进程
print ("test")
if ret>0: #子进程的ret为0 ,父进程不为 0
print "父进程"
esle :
print "子进程"
程序执⾏到os.fork()时,操作系统会创建⼀个新的进程(⼦进程),然后 复制⽗进程的所有信息到⼦进程中 然后⽗进程和⼦进程都会从fork()函数中得到⼀个返回值,在⼦进程中这 个值⼀定是0,⽽⽗进程中是⼦进程的 id号
提供了⼀个fork()系统函数,它⾮常特殊。 普通的函数调⽤,调⽤⼀次,返回⼀次,但是fork()调⽤⼀次,返回两次,因 为操作系统⾃动把当前进程(称为⽗进程)复制了⼀份(称为⼦进程),然 后,分别在⽗进程和⼦进程内返回。 ⼦进程永远返回0,⽽⽗进程返回⼦进程的ID。 这样做的理由是,⼀个⽗进程可以fork出很多⼦进程,所以,⽗进程要记下 每个⼦进程的ID,⽽⼦进程只需要调⽤getppid()就可以拿到⽗进程的ID。
多级fork
如
os.fork()
os.fork()
os.fork()
会出现8个进程
ret=Os.fork()
If ret ==0:
Os.fork()
Else:
Print “#######”
会出现3个进程,在fork下⽗进程、⼦进程执⾏顺序没有规律,完全取决于操作系统的调度算法
**由于windows下fork不能使用,虚拟机还没来得及安装,这里就不演示fork的例子了,下次介绍在linux、mac和windows下都可以创建进程的方法,