并发与多线程
并发与多线程
程序的执行 von Neumann体系结构:程序(指令序列)和数据 都存储在内存中 CPU根据程序计数器(PC)(或称指令指针(IP)) 取出当前指令执行,然后PC被赋予下一条要执 行的指令的地址. ·存在指令级并行技术,但我们讨论程序级的并 行 Lu Chaojun,SJTU 2
Lu Chaojun, SJTU 2 程序的执行 • von Neumann体系结构:程序(指令序列)和数据 都存储在内存中 • CPU根据程序计数器(PC)(或称指令指针(IP)) 取出当前指令执行,然后PC被赋予下一条要执 行的指令的地址. • 存在指令级并行技术,但我们讨论程序级的并 行
顺序(或串行)执行 ·CPU执行一个程序时总是从该程序的第一条指 令开始,不间断地一直到执行到最后一条指令. ·只有一个程序结束,才会去执行下一个程序. . CPU每次由一个程序独占.只要前一个程序还没 有结束,下一个程序就不能使用CPU. o 缺点:系统资源的利用率不高 一计算机系统中有许多资源.当一个程序在使用某个资源时,其他 资源是空闲的如果允许其他程序使用空闲资源,就能提高系统 资源的利用率 -例如,DMA Lu Chaojun,SJTU 3
Lu Chaojun, SJTU 3 顺序(或串行)执行 • CPU执行一个程序时总是从该程序的第一条指 令开始,不间断地一直到执行到最后一条指令. • 只有一个程序结束,才会去执行下一个程序. • CPU每次由一个程序独占.只要前一个程序还没 有结束,下一个程序就不能使用CPU. • 缺点:系统资源的利用率不高. – 计算机系统中有许多资源.当一个程序在使用某个资源时,其他 资源是空闲的.如果允许其他程序使用空闲资源,就能提高系统 资源的利用率. – 例如,DMA
并发执行 ·计算机程序的执行是由操作系统控制的现代操 作系统都支持所谓"多道程序"或"多任务",即允 许多个程序"同时"执行 。"同时:在只有一个CPU的情况下,是不可能有真 正的多个程序"同时"运行的:CPU在任一时刻只 能执行一条指令! -分时使用CPU,即CPU在多个程序之间切换 。 这种多个相互独立的程序交叉执行的方式称为 并发或并行执行 ·多处理器/多核处理器上能真正并行. Lu Chaojun,SJTU 4
Lu Chaojun, SJTU 4 并发执行 • 计算机程序的执行是由操作系统控制的.现代操 作系统都支持所谓"多道程序"或"多任务" ,即允 许多个程序"同时"执行. • "同时“:在只有一个CPU的情况下,是不可能有真 正的多个程序"同时"运行的:CPU在任一时刻只 能执行一条指令! – 分时使用CPU,即CPU在多个程序之间切换. • 这种多个相互独立的程序交叉执行的方式称为 并发或并行执行. • 多处理器/多核处理器上能真正并行
进程 进程,是指程序的一次执行而形成的实体 程序一旦执行,即创建一个进程 进程的构成:程序代码+进程状态信息(上 下文,包括程序数据的当前值,当前执行点 等)等 ·程序与进程:不同程序的执行对应不同的 进程:同一个程序多次执行也创建多个进 程(相同程序代码+不同上下文) ·OS调度进程:上下文切换代价高 Lu Chaojun,SJTU 5
进程 • 进程,是指程序的一次执行而形成的实体. 程序一旦执行,即创建一个进程. • 进程的构成:程序代码+进程状态信息(上 下文,包括程序数据的当前值,当前执行点 等)等. • 程序与进程:不同程序的执行对应不同的 进程;同一个程序多次执行也创建多个进 程(相同程序代码+不同上下文). • OS调度进程:上下文切换代价高. Lu Chaojun, SJTU 5
线程 ·线程,是指程序(进程)中的一段代码,它构 成程序中一个相对独立的执行流. -字面意义:线程是程序内部的一个"线索 ·线程是一个程序内部的多任务机制. 一一个程序中可以有多个执行"线索". 线程是OS调度的最小单位, 一切换代价小. Lu Chaojun,SJTU 6
线程 • 线程,是指程序(进程)中的一段代码,它构 成程序中一个相对独立的执行流. – 字面意义:线程是程序内部的一个"线索” • 线程是一个程序内部的多任务机制. – 一个程序中可以有多个执行"线索". • 线程是OS调度的最小单位. – 切换代价小. Lu Chaojun, SJTU 6
进程VS线程 ·多个进程一般是相互独立的,而多线程是 同一进程的一个多个执行流; 进程带有独立的状态信息,而一个进程内 的多个线程则共享状态,内存和其他资源 进程有独立的地址空间,而同一进程的多 个线程共享地址空间 ·进程间通信(PC)较麻烦,而线程之间可通 过共享内存容易地通信 Lu Chaojun,SJTU 7
进程 vs 线程 • 多个进程一般是相互独立的,而多线程是 同一进程的一个多个执行流; • 进程带有独立的状态信息,而一个进程内 的多个线程则共享状态,内存和其他资源 • 进程有独立的地址空间,而同一进程的多 个线程共享地址空间 • 进程间通信(IPC)较麻烦,而线程之间可通 过共享内存容易地通信 Lu Chaojun, SJTU 7
多线程编程 ·线程原是OS中的概念,是系统的工具,用于 系统的功能 ·线程现在已成为用户程序设计的工具 ·应用在需要并行执行的场合: -科学应用:更快地计算, -解决阻塞:用户输入;在长时间计算期间进行 显示服务;多媒体,动画等 Lu Chaojun,SJTU 8
多线程编程 • 线程原是OS中的概念,是系统的工具,用于 系统的功能 • 线程现在已成为用户程序设计的工具 • 应用在需要并行执行的场合: – 科学应用:更快地计算; – 解决阻塞:用户输入;在长时间计算期间进行 显示服务;多媒体,动画等. Lu Chaojun, SJTU 8
Python多线程编程(1) 。利用thread模块:import thread ·线程的创建和启动: thread.start new thread (function,args) -创建一个新线程并立即返回:新线程启动,向 函数function传递参量元组args. ·线程执行的代码:即function ·线程终止:当函数function:返回. ·例:thread 0.py,thread 1.py Lu Chaojun,SJTU 9
Python多线程编程(1) • 利用thread模块: import thread • 线程的创建和启动: thread.start_new_thread (function, args) – 创建一个新线程并立即返回;新线程启动,向 函数function传递参量元组args. • 线程执行的代码:即function • 线程终止:当函数function返回. • 例:thread_0.py, thread_1.py Lu Chaojun, SJTU 9
Python多线程编程(2) ·利用threading模块:import threading 本模块提供Thread类来支持线程化程序设 计 创建线程对象后,通过调用它的start)方法 来启动线程;start(0在一个独立的控制流 中调用run)方法 。 有两种方法指定线程的活动: -向Thread类构造器传递一个可调用对象 -在一个Thread类的新子类中重定义run()方法 Lu Chaojun,SJTU 10
Python多线程编程(2) • 利用threading模块: import threading • 本模块提供Thread类来支持线程化程序设 计. • 创建线程对象后,通过调用它的start()方法 来启动线程; start()在一个独立的控制流 中调用run()方法. • 有两种方法指定线程的活动: – 向Thread类构造器传递一个可调用对象 – 在一个Thread类的新子类中重定义run()方法. Lu Chaojun, SJTU 10