http://www.cnblogs.com/linhaifeng/articles/6817679.html
进程是对正在运行程序的一个抽象。即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。
将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。
#一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景:针对单核,实现并发 ps: 现在的主机一般是多核,那么每个核都会利用多道技术 有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个 cpu中的任意一个,具体由操作系统调度算法决定。 2.空间上的复用:如内存中同时有多道程序 3.时间上的复用:复用一个cpu的时间片 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样 才能保证下次切换回来时,能基于上次切走的位置继续运行
线程
import threading import time def listen(parm): print("%s start listening %s... " %(time.ctime(),parm)) time.sleep(3) print("%s end listening %s" %(time.ctime(),parm)) def play(): print("%s start play...." %(time.ctime())) time.sleep(5) print("%s end play..." %(time.ctime())) if __name__ == "__main__": t1 = threading.Thread(target=listen, args=("music",)) t2 = threading.Thread(target=play) t1.start() t2.start() print("%s end of main..." %time.ctime()) ''' Fri Mar 8 17:14:31 2019 start listening music... Fri Mar 8 17:14:31 2019 start play....Fri Mar 8 17:14:31 2019 end of main... Fri Mar 8 17:14:34 2019 end listening music Fri Mar 8 17:14:36 2019 end play... '''
join()方法
主线程要等待join的线程结束之后才能退出
import threading import time def listen(parm): print("%s start listening %s... " %(time.ctime(),parm)) time.sleep(3) print("%s end listening %s" %(time.ctime(),parm)) def play(): print("%s start play...." %(time.ctime())) time.sleep(5) print("%s end play..." %(time.ctime())) if __name__ == "__main__": t1 = threading.Thread(target=listen, args=("music",)) t2 = threading.Thread(target=play) t1.start() t2.start() t1.join() t2.join() print("%s end of main..." %time.ctime()) ''' Fri Mar 8 17:18:01 2019 start listening music... Fri Mar 8 17:18:01 2019 start play.... Fri Mar 8 17:18:04 2019 end listening music Fri Mar 8 17:18:06 2019 end play... Fri Mar 8 17:18:06 2019 end of main... '''