线程、进程、多线程、多进程和多任务之间的区别与联系
操作系统复习-进程管理
2.1 进程与线程进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程)优先级是进程调度的重要依据,一旦确定就不能改变(错)在单CPU的系统中,任意时刻都有一个进程处于运行状态(错,可以空转)进程申请CPU得不到满足时,其状态变为阻塞(错!等待CPU的进程处于就绪状态)进程获得CPU运行是通过调度得到的(对)线程是一种特殊的进程(对)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对)进程是PCB结构、程序和数据的集合(对)撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进程,另一种是撤销指定进程和其子孙进程)线程的切换,可能会引起进程的切换(对)引入线程后,处理机只在线程中切换(错!!)线程是比进程更小的能独立运行的基本单位(错,这句话的成立需要一定的前提条件)线程的引入增加了程序执行的时空开销(错,应为减少)一个进程一定包含多个线程(错)一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)中断是进程切换的必要条件,而不是充分条件。
(对)进程的基本特点:动态性,并发性,独立性,异步性,结构性。
在多道程序设计环境下,操作系统分配资源以进程为基本单位在引入线程的操作系统中,资源分配的基本单位是进程,CPU分配的基本单位是线程。
在引入线程的操作系统中,进程是资源分配的基本单位,线程是调度的基本单位从运行状态到就绪状态是由于时间片用完或出现了比现在进程优先级更高的进程(调度程序决定)从就绪状态到运行状态是调度程序决定的从阻塞状态到就绪状态是协作程序决定的从运行状态到阻塞状态是进程自身决定的(只有这个是主动的)对进程的管理和控制使用原语。
(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)一个进程被唤醒意味着进程变为就绪状态(该进程可能重新占用CPU)。
(唤醒原语的功能是将被被唤醒进程从阻塞队列中移到就绪队列中)降低进程优先级的合理时机是进程的时间片用完。
进程管理习题
一、单项选择题1.一个进程是( )。
A.由协处理器执行的一个程序B.一个独立的程序+数据集C.PCB 结构与程序和数据的组合D.一个独立的程序2.下列关于线程的叙述中,正确的是( )。
A.线程包含 CPU 现场,可以独立执行程序B.每一个线程有自己独立的地址空间C.进程只能包含一个线程D.线程之间的通信必须使用系统调用函数3.进程之间交换数据不能通过( )途径进行。
A.共享文件C.访问进程地址空间B.消息传递D.访问共享存储区4.进程和程序的根本区别是( )。
A.静态和动态特点B.是不是被调入到内存在C.是不是具有就绪.运行和等待三种状态D.是不是占有处理器5.下面的叙述中,正确的是( )。
A.进程获得处理器运行时通过调度得到的B.优先级是进程调度的重要依据,一旦确定不能改动C.在单处理器系统中,任何时刻都惟独一个进程处于运行状态D.进程申请处理器而得不到满足时其状态变为阻塞状态 6.若某一进程拥有 100 个线程,这些线程都属于用户级线程,则在系统调度执行时间上占用的时间片是( )。
A.1 B .100 C.1/100 D.07.进程 Pl .P2 和 P3 单独执行时间分别为 10min.15 min 和 20min,其中处理器占用时间分别为 2min.3 min 和 12min。
如果采用多道程序设计技术使其并发,加之系统开消 5min ,那末并发使得计算机系统的效率提高了( )。
A.1 B.38% C.74% D.51%8.操作系统是根据( )来对并发执行的进程进行控制和管理的。
A.进程的基本状态 B.进程控制块C.多道程序设计 D.进程的优先权 9.在任何时刻,一个进程的状态变化( )引起另一个进程的状态变化。
A.必然 B.一定不 C.不一定 D.不可能 10.在单处理器系统中,如果同时存在 10 个进程,则处于就绪队列中的进程最多有()个。
A.1 B .8 C.9 D.1011.一个进程释放了一台打印机后,有可能改变( )的状态。
多线程知识点总结归纳
多线程知识点总结归纳多线程知识点总结归纳如下:1. 线程和进程的区别- 进程是程序的一个执行实例,每个进程都有自己的独立内存空间、代码和数据,相互之间不会直接共享资源。
线程是在进程内部运行的一段代码,多个线程可以共享同一个进程的资源。
2. 多线程的优势- 提高程序的并发性和响应性,能够更有效地利用 CPU 资源。
- 使得程序能够更轻松地实现并发处理和多任务处理。
- 能够通过多线程实现一些复杂任务,如网络编程、图形界面等。
3. 多线程的基本概念- 线程调度:操作系统通过调度算法决定哪个线程应当运行,哪个线程应当阻塞或唤醒。
- 线程同步:多个线程访问共享数据时需要进行同步操作,以避免数据竞争和死锁等问题。
- 线程通信:多个线程之间需要进行通信,以进行资源共享或协作完成任务。
4. 多线程的创建和启动- 使用线程类:在 Java 中,可以通过继承 Thread 类或实现 Runnable 接口来创建线程。
- 线程生命周期:线程的生命周期包括新建、就绪、运行、阻塞和死亡等状态。
5. 线程的安全性- 多线程程序需要考虑线程安全性,以避免数据竞争和死锁等问题。
- 常用的线程安全性方法包括加锁、使用线程安全的数据结构和对象等。
6. 线程的调度- 多线程程序的运行顺序由操作系统的调度算法决定,而且在不同的操作系统上可能有不同的调度策略。
- 线程的调度策略包括抢占式调度和协作式调度等。
7. 线程的优先级- 线程的优先级决定了它在被调度时的优先级,可以通过设置线程的优先级来影响它的调度顺序。
8. 线程的阻塞和唤醒- 线程在执行过程中可能会因为某些原因而阻塞,需要等待一定的条件满足后才能被唤醒继续执行。
- 一些常见的线程阻塞和唤醒操作包括等待、通知、等待超时等。
9. 线程同步的方法- 使用锁机制:在多线程程序中通常使用锁来保护共享资源,以避免数据竞争和执行顺序问题。
- 使用同步代码块:通过 synchronized 关键字或 ReentrantLock 类等来创建同步代码块,保护共享资源的访问。
任务、进程和线程的区别
任务、进程和线程的区别推荐摘:任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。
一个任务既可以是一个进程,也可以是一个线程。
简而言之,它指的是一系列共同达到某一目的的操作。
例如,读取数据并将数据放入内存中。
这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。
进程(process)常常被定义为程序的执行。
可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。
一个进程所拥有的数据和变量只属于它自己。
线程(thread)则是某一进程中一路单独运行的程序。
也就是说,线程存在于进程之中。
一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。
由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。
由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。
一个进程和一个线程最显著的区别是:线程有自己的全局数据。
线程存在于进程中,因此一个进程的全局变量由所有的线程共享。
由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用一样。
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,由多个执行部分可以同时执行。
但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,这就是进程和线程的重要区别。
多线程与多进程的区别
多线程与多进程的区别(1)多线程多进程的区别维度多进程多线程总结数据共享、同步数据是分开的:共享复杂,需要⽤IPC;同步简单多线程共享进程数据:共享简单;同步复杂各有优势内存、CPU占⽤内存多,切换复杂,CPU利⽤率低占⽤内存少,切换简单,CPU利⽤率⾼线程占优创建销毁、切换创建销毁、切换复杂,速度慢创建销毁、切换简单,速度快线程占优编程调试编程简单,调试简单编程复杂,调试复杂进程占优可靠性进程间不会相互影响⼀个线程挂掉将导致整个进程挂掉进程占优分布式适应于多核、多机分布;如果⼀台机器不够,扩展到多台机器⽐较简单适应于多核分布进程占优然后我们来看下线程和进程间的⽐较⼦进程继承⽗进程的属性:⼦线程继承主线程的属性:实际⽤户ID,实际组ID,有效⽤户ID,有效组ID;附加组ID;进程组ID;会话ID;控制终端;设置⽤户ID标志和设置组ID标志;当前⼯作⽬录;根⽬录;⽂件模式创建屏蔽字(umask);信号屏蔽和安排;针对任⼀打开⽂件描述符的在执⾏时关闭(close-on-exec)标志;环境;连接的共享存储段;存储映射;资源限制;进程中的所有信息对该进程的所有线程都是共享的;可执⾏的程序⽂本;程序的全局内存;堆内存;栈;⽂件描述符;信号的处理是进程中所有线程共享的(注意:如果信号的默认处理是终⽌该进程那么即是把信号传给某个线程也⼀样会将进程杀掉);⽗⼦进程之间的区别:⼦线程特有的:fork的返回值(=0⼦进程);进程ID不同;两个进程具有不同的⽗进程ID;⼦进程的tms_utime,tms_stime,tms_cutime以及tms_ustime均被设置为0;不继承⽗进程设置的⽂件锁;⼦进程的未处理闹钟被清除;⼦进程的未处理信号集设置为空集;线程ID;⼀组寄存器值;栈;调度优先级和策略;信号屏蔽字;errno变量;线程私有数据;1)需要频繁创建销毁的优先⽤线程。
实例:web服务器。
来⼀个建⽴⼀个线程,断了就销毁线程。
一文读懂什么是进程、线程、协程(建议收藏)
⼀⽂读懂什么是进程、线程、协程(建议收藏)进程我们都知道计算机的核⼼是CPU,它承担了所有的计算任务;⽽操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应⽤程序则是具有某种功能的程序,程序是运⾏于操作系统之上的。
进程是⼀个具有⼀定独⽴功能的程序在⼀个数据集上的⼀次动态执⾏的过程,是操作系统进⾏资源分配和调度的⼀个独⽴单位,是应⽤程序运⾏的载体。
进程是⼀种抽象的概念,从来没有统⼀的标准定义。
进程⼀般由程序、数据集合和进程控制块三部分组成。
程序⽤于描述进程要完成的功能,是控制进程执⾏的指令集;数据集合是程序在执⾏时所需要的数据和⼯作区;程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯⼀标志。
进程具有的特征:动态性:进程是程序的⼀次执⾏过程,是临时的,有⽣命期的,是动态产⽣,动态消亡的;并发性:任何进程都可以同其他进程⼀起并发执⾏;独⽴性:进程是系统进⾏资源分配和调度的⼀个独⽴单位;结构性:进程由程序、数据和进程控制块三部分组成。
线程在早期的操作系统中并没有线程的概念,进程是能拥有资源和独⽴运⾏的最⼩单位,也是程序执⾏的最⼩单位。
任务调度采⽤的是时间⽚轮转的抢占式调度⽅式,⽽进程是任务调度的最⼩单位,每个进程有各⾃独⽴的⼀块内存,使得各个进程之间内存地址相互隔离。
后来,随着计算机的发展,对CPU的要求越来越⾼,进程之间的切换开销较⼤,已经⽆法满⾜越来越复杂的程序的要求了。
于是就发明了线程。
线程是程序执⾏中⼀个单⼀的顺序控制流程,是程序执⾏流的最⼩单元,是处理器调度和分派的基本单位。
⼀个进程可以有⼀个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
⼀个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。
⽽进程由内存空间(代码、数据、进程空间、打开的⽂件)和⼀个或多个线程组成。
多任务与多线程的区别
多任务与多线程的区别1.多任务在计算中,多任务是⼀种多个任务(也称之为进程)共享处理资源(如CPU)的⽅法。
在多任务操作系统上,例如Windows XP,您可以同时运⾏多个应⽤程序。
多任务实质是指操作系统在每个计算任务间快速切换,以致于看上去不同的应⽤似乎在同时执⾏多项操作。
当CPU时钟频率稳步提⾼时,不仅应⽤程序的运⾏速率可以更快,⽽且操作系统在应⽤间的切换速率也更快。
这样就提供了更好的整体性能——⼀台计算机可以同时发⽣多项操作,每项应⽤可以更快速地运⾏。
2. 单核对于拥有单个CPU核的计算机,任意时刻只能运⾏⼀项任务,这也意味着CPU主动地执⾏该任务的指令。
多任务通过调度(Scheduling)哪⼀项任务在哪⼀时刻运⾏以及何时切换到另⼀项任务,解决了这⼀问题。
图1。
单核系统⽀持多任务操作系统。
⽂字处理、Email、r⽹页浏览器、防病毒软件、进程、操作系统、CPU核3. 多核当运⾏于多核系统时,多任务操作系统可以真正地并发执⾏多项任务。
针对不同的任务,多个计算引擎独⽴地⼯作。
例如,在⼀个双核系统,有四项应⽤,如⽂字处理、电⼦邮件、⽹页浏览和防病毒软件,每项应⽤可以同时访问⼀个独⽴的处理器核。
您可以在检查电⼦邮件的同时输⼊⼀封⽂档,真正实现多任务,从⽽改善应⽤的整体性能。
图2。
双核系统⽀持多任务操作系统,如Windows XP,以真正地同时执⾏两项任务。
⽂字处理、Email电⼦邮件、⽹页浏览器、防病毒软件、进程、操作系统、CPU核操作系统通过在独⽴的CPU核之间划分不同的应⽤或进程,从⽽更有效地执⾏多项应⽤。
该计算机可以将⼯作任务分摊化——每个核在管理和切换原先⼀半数量的应⽤任务,并提供更好的整体吞吐量与性能。
实际上,这些应⽤任务是并⾏地执⾏的。
4. 多线程多线程将多任务的思想拓展到应⽤,因此,您可以将单个应⽤中的特定步骤进⼀步分解成⼀个个线程,每个线程可以并⾏运⾏。
操作系统不仅在不同的应⽤任务间分配处理时间,⽽且在⼀项应⽤的每个线程间分配处理时间。
进程与线程的定义、关系及区别
进程与线程的定义、关系及区别进程与线程的定义、关系及区别⼀、进程的定义进程:指在系统中能独⽴运⾏并作为资源分配的基本单位,它是由⼀组机器指令、数据和堆栈等组成的,是⼀个能独⽴运⾏的活动实体。
进程⼀般有三个状态:就绪状态、执⾏状态和等待状态【或称阻塞状态】;进程只能由⽗进程建⽴,系统中所有的进程形成⼀种进程树的层次体系;挂起命令可由进程⾃⼰和其他进程发出,但是解除挂起命令只能由其他进程发出。
进程控制块(PCB):PCB不但可以记录进程的属性信息,以便对进程进⾏控制和管理,⽽且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB⽽知道该进程存在与否。
系统建⽴进程的同时就建⽴该进程的PCB,在撤销⼀个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。
⼀般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。
由程序段、相关的数据段和PCB三部分构成了进程实体(⼜称进程印像),⼀般,我们把进程实体就简称为进程。
进程的特征:1.动态性:进程的实质是程序的⼀次执⾏过程,进程是动态产⽣,动态消亡的。
2.并发性:任何进程都可以同其他进程⼀起并发执⾏。
3.独⽴性:进程是⼀个能独⽴运⾏的基本单位,同时也是系统分配资源和调度的独⽴单位。
4.异步性:由于进程间的相互制约,使进程具有执⾏的间断性,即进程按各⾃独⽴的、不可预知的速度向前推进。
⼆、线程的定义线程:线程是进程中的⼀个实体,作为系统调度和分派的基本单位。
线程的性质:1.线程是进程内的⼀个相对独⽴的可执⾏的单元。
若把进程称为任务的话,那么线程则是应⽤中的⼀个⼦任务的执⾏。
2.由于线程是被调度的基本单元,⽽进程不是调度单元。
所以,每个进程在创建时,⾄少需要同时为该进程创建⼀个线程。
即进程中⾄少要有⼀个或⼀个以上的线程,否则该进程⽆法被调度执⾏。
3.进程是被分给并拥有资源的基本单元。
同⼀进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使⽤他们。
进程和线程的区别
进程和线程的区别进程:指在系统中正在运⾏的⼀个应⽤程序;程序⼀旦运⾏就是进程;或者更专业化来说:进程是指程序执⾏时的⼀个实例,即它是程序已经执⾏到课中程度的数据结构的汇集。
从内核的观点看,进程的⽬的就是担当分配系统资源(CPU时间、内存等)的基本单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独⽴执⾏的⼀个单元执⾏流。
进程——资源分配的最⼩单位,线程——程序执⾏的最⼩单位。
线程进程的区别体现在4个⽅⾯:1、因为进程拥有独⽴的堆栈空间和数据段,所以每当启动⼀个新的进程必须分配给它独⽴的地址空间,建⽴众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说⼗分“奢侈”,系统开销⽐较⼤,⽽线程不⼀样,线程拥有独⽴的堆栈空间,但是共享数据段,它们彼此之间使⽤相同的地址空间,共享⼤部分数据,⽐进程更节俭,开销⽐较⼩,切换速度也⽐进程快,效率⾼,但是正由于进程之间独⽴的特点,使得进程安全性⽐较⾼,也因为进程有独⽴的地址空间,⼀个进程崩溃后,在保护模式下不会对其它进程产⽣影响,⽽线程只是⼀个进程中的不同执⾏路径。
⼀个线程死掉就等于整个进程死掉。
2、体现在通信机制上⾯,正因为进程之间互不⼲扰,相互独⽴,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,⽽线程由于共享数据段所以通信机制很⽅便。
3、体现在CPU系统上⾯,线程使得CPU系统更加有效,因为操作系统会保证当线程数不⼤于CPU数⽬时,不同的线程运⾏于不同的CPU 上。
4、体现在程序结构上,举⼀个简明易懂的列⼦:当我们使⽤进程的时候,我们不⾃主的使⽤if else嵌套来判断pid,使得程序结构繁琐,但是当我们使⽤线程的时候,基本上可以甩掉它,当然程序内部执⾏功能单元需要使⽤的时候还是要使⽤,所以线程对程序结构的改善有很⼤帮助。
什么情况下使⽤进程个线程:1、需要频繁创建销毁的优先使⽤线程;因为对进程来说创建和销毁⼀个进程代价是很⼤的2、线程的切换速度快,所以在需要⼤量计算,切换频繁时⽤线程,还有耗时的操作使⽤线程可提⾼应⽤程序的响应3、因为对CPU系统的效率使⽤上线程更占优,所以可能要发展到多机分布的⽤进程,多核分布⽤线程4、并⾏操作时使⽤线程,如C/S架构的服务器端并发线程响应⽤户的请求5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好因为我的项⽬中需要对数据段的数据共享,可以被多个程序所修改,所以使⽤线程来完成此操作,⽆需加⼊复杂的通信机制,使⽤进程需要添加复杂的通信机制实现数据段的共享,增加了我的代码的繁琐,⽽且使⽤线程开销⼩,项⽬运⾏的速度快,效率⾼。
进程和线程是什么关系与区别
进程和线程是什么关系与区别
进程
进程是程序的⼀次执⾏过程,是⼀个动态概念,是程序在执⾏过程中分配和管理资源的基本单位,每⼀个进程都有⼀个⾃⼰的地址空间,⾄少有5 种基本状态,它们是:初始态,执⾏态,等待状态,就绪状态,终⽌状态。
线程
线程是CPU调度和分派的基本单位,它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源。
【进程是资源分配的最⼩单位,线程是CPU调度的最⼩单位】
进程和线程的关系
线程是进程的⼀部分
⼀个线程只能属于⼀个进程,⽽⼀个进程可以有多个线程,但⾄少有⼀个线程
进程和线程的区别
理解它们的差别,我从资源使⽤的⾓度出发。
(所谓的资源就是计算机⾥的中央处理器,内存,⽂件,⽹络等等)
根本区别:进程是操作系统资源分配的基本单位,⽽线程是任务调度和执⾏的基本单位
开销⽅⾯:每个进程都有独⽴的代码和数据空间(程序上下⽂),进程之间切换开销⼤;线程可以看做轻量级的进程,同⼀类线程共享代码和数据空间,每个线程都有⾃⼰独⽴的运⾏栈和程序计数器(PC),线程之间切换的开销⼩
所处环境:在操作系统中能同时运⾏多个进程(程序);⽽在同⼀个进程(程序)中有多个线程同时执⾏(通过CPU调度,在每个时间⽚中只有⼀个线程执⾏)
内存分配:系统为每个进程分配不同的内存空间;⽽对线程⽽⾔,除了CPU外,系统不会为线程分配内存(线程所使⽤的资源来⾃其所属进程的资源),线程组之间只能共享资源
包含关系:线程是进程的⼀部分,所以线程也被称为轻权进程或者轻量级进程。
Linux学习知识点--进程和线程有什么区别进程和线程的区别
Linux学习知识点--进程和线程有什么区别进程和线程的区别学习Linu某来说并不是一件简单的事情,之前作为一个非常的网管大神,遇到Linu某的时候还是表示胡一脸的蒙蔽,真正系统学习了之后才知道这个非常乏味却又充满未知的领域是多么的吸引我的注意。
线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
"进程——资源分配的最小单位,线程——程序执行的最小单位"进程从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
总的来说就是:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。
(下面的内容摘自Linu某下的多线程编程)使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。
我们知道,在Linu某系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。
而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
进程和线程的区别和联系
进程和线程的区别和联系
联系:1、线程是进程的最⼩执⾏和分配单元,不能独⽴运动,必须依赖于进程,这也就可以说众多的线程组成了进程
2、同⼀个进程中的线程是共享内存资源的,⽐如全局变量,每⼀个线程都可以改变其共同进程中的全局变量的数据
区别:1、进程是程序在系统上进⾏顺序执⾏的动态活动。
程序加载到内存,系统为其分配内存空间⽽执⾏,⽽这种执⾏的程序称之为进程(程序是指令的集合,是程序运⾏的静态描述⽂本)
2、进程是操作系统进⾏分配(⽐如内存)的最基本单位,线程是cpu能够进⾏调度和分派的最基本单位
3、进程下管理的最底层单位是线程,在等级上,进程明显⼤于线程
4、⼀个程序可以有多个进程,⼀个进程可以有多个线程(⼀个进程⾥⾄少有⼀个线程),进程是拥有其独⽴的内存单元地址空间,⽽线程共享进程中的资源,所以极⼤的提⾼了程序的运⾏效率
5、线程基本不拥有系统资源,它与其他线程共享同⼀进程所拥有的共同资源。
由于线程⽐进程⼩,且基本不拥有系统资源,因此对其调度的开销会很⼩,从⽽极⼤的提⾼了对系统资源的利⽤率
6、当服务器需要响应多个⽤户请求时,如果创建多个进程,由于进程与进程之间是相互独⽴的,会过多的占⽤内存空间,降低服务器的响应速度,但线程是共享同⼀进程中的资源的,使⽤线程会提⾼系统的并发型。
进程、线程、协程之概念理解+线程和进程各自有什么区别和优劣
进程、线程、协程之概念理解+线程和进程各⾃有什么区别和优劣⼀、概念⾸先,根据图了解⼀下串⾏,并⾏和并发的基本概念: 1、进程 资源分配的基本单位进程(Process)是计算机中的程序关于某数据集合上的⼀次运⾏活动,是系统进⾏资源分配和调度的基本单位,是操作系统结构的基础。
在早期⾯向进程设计的计算机结构中,进程是程序的基本执⾏实体;在当代⾯向线程设计的计算机结构中,进程是线程的容器。
程序是指令、数据及其组织形式的描述,进程是程序的实体。
Linux系统函数fork()可在⽗进程中创建⼀个⼦进程,在⽗进程接到新请求时,复制出⼀个⼦进程来处理,即⽗进程监控请求,⼦进程处理,实现并发处理。
注意:必须是Linux系统,windows不能⽤fork。
组成进程是⼀个实体。
每⼀个进程都有它⾃⼰的地址空间,⼀般情况下,包括⽂本区域(text region)、数据区域(data region)和堆栈(stack region)。
⽂本区域存储处理器执⾏的代码;数据区域存储变量和进程执⾏期间使⽤的动态分配的内存;堆栈区域存储着活动过程调⽤的指令和本地变量。
特征动态性:进程的实质是程序在多道程序系统中的⼀次执⾏过程,进程是动态产⽣,动态消亡的。
并发性:任何进程都可以同其他进程⼀起并发执⾏独⽴性:进程是⼀个能独⽴运⾏的基本单位,同时也是系统分配资源和调度的独⽴单位;异步性:由于进程间的相互制约,使进程具有执⾏的间断性,即进程按各⾃独⽴的、不可预知的速度向前推进结构特征:进程由程序、数据和进程控制块三部分组成。
多个不同的进程可以包含相同的程序:⼀个程序在不同的数据集⾥就构成不同的进程,能得到不同的结果;但是执⾏过程中,程序不能发⽣改变。
进程的⼏种状态(1)run(运⾏状态):正在运⾏的进程或在等待队列中等待的进程,等待的进程只要以得到cpu就可以运⾏(2)Sleep(可中断休眠状态):相当于阻塞或在等待的状态(3)D(不可中断休眠状态):在磁盘上的进程(4)T(停⽌状态):这中状态⽆法直观的看见,因为是进程停⽌后就释放了资源,所以不会留在linux中(5)Z(僵⼫状态):⼦进程先与⽗进程结束,但⽗进程没有调⽤wait或waitpid来回收⼦进程的资源,所以⼦进程就成了僵⼫进程,如果⽗进程结束后任然没有回收⼦进程的资源,那么1号进程将回收 2、线程 CPU调度和分配的基本单位,程序执⾏的最⼩单位。
进程、线程简介及多线程的优缺点
进程、线程简介及多线程的优缺点先介绍下进程、线程、多线程,再总结下多线程的优缺点:⼀、进程进程是具有⼀定独⽴功能的程序关于某个数据集合上的⼀次运⾏活动,也就是应⽤程序的执⾏实例,进程是系统进⾏资源分配和调度的⼀个独⽴单位。
每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运⾏过程中创建的资源随着进程的终⽌⽽被销毁,所使⽤的系统资源在进程终⽌时被释放或关闭。
⼆、线程线程是程序中的⼀个执⾏流,⼀个进程中可以包含多个线程,每个线程都有⾃⼰的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执⾏同样的函数。
三、多线程多线程是指程序中包含多个执⾏流,即在⼀个程序(进程)中可以同时运⾏多个不同的线程来执⾏不同的任务,也就是说允许单个程序(进程)创建多个并⾏执⾏的线程来完成各⾃的任务。
在单核处理器的电脑中,线程协调程序在完成⼀个时间⽚之后迅速地在活动的线程之间进⾏切换执⾏。
⽐如⼀个程序执⾏期间,你可以进⾏多个操作,其实就是线程间在飞快的切换,这叫做并发。
在多核电脑中,多线程被实现成混合时间⽚和真实的并⾏,即不同的线程在不同的CPU上执⾏。
1、多线程的优点 多线程处理可以同时运⾏多个线程。
由于多线程应⽤程序将程序划分成多个独⽴的任务,因此可以在以下⽅⾯显著提⾼性能多线程技术使程序的响应速度更快 ,因为⽤户界⾯可以在进⾏其它⼯作的同时⼀直处于活动状态;当前没有进⾏处理的任务时可以将处理器时间让给其它任务;占⽤⼤量处理时间的任务可以定期将处理器时间让给其它任务;可以随时停⽌任务;可以分别设置各个任务的优先级以优化性能2、多线程的缺点线程也是程序,所以线程需要占⽤内存,线程越多占⽤内存也越多;多线程需要协调和管理,所以需要CPU时间跟踪线程;线程之间对共享资源的访问会相互影响,必须解决竞⽤共享资源的问题;线程太多会导致控制太复杂,最终可能造成很多Bug;3、什么时候使⽤多线程耗时或⼤量占⽤处理器的任务阻塞⽤户界⾯操作; 多线程程序⼀般被⽤来在后台执⾏耗时的任务。
多线程的概念
多线程的概念多线程的概念多线程是指在一个程序中同时运行多个线程,每个线程都可以独立地执行不同的任务。
与单线程相比,多线程可以提高程序的并发性和响应速度,使得程序具有更好的用户体验和更高的效率。
一、多线程的基本概念1. 线程:是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中真正执行任务的部分。
2. 进程:是一个正在执行中的程序,它由代码、数据集合以及一组系统资源组成。
3. 上下文切换:是指CPU从一个进程或者线程切换到另外一个进程或者线程时所需要保存和恢复的所有状态信息。
4. 并发性:是指两个或多个事件在同一时间间隔内发生。
二、多线程的优点1. 提高程序响应速度:当一个任务被阻塞时,其他任务可以继续执行,从而提高了程序响应速度。
2. 提高系统资源利用率:通过充分利用CPU时间片和IO等待时间来提高系统资源利用率。
3. 改善用户体验:当一个任务需要较长时间才能完成时,用户可以同时进行其他操作,从而改善了用户体验。
三、多线程实现方式1. 继承Thread类:通过继承Thread类并重写run()方法来实现多线程。
2. 实现Runnable接口:通过实现Runnable接口并重写run()方法来实现多线程。
3. 实现Callable接口:通过实现Callable接口并重写call()方法来实现多线程,可以返回执行结果。
四、多线程的应用场景1. 网络编程:在网络编程中,一个客户端连接到服务器时,服务器需要为该客户端创建一个新的线程来处理请求。
2. GUI编程:在GUI编程中,一个事件处理程序可以启动一个新的线程来执行长时间运行的任务,从而不阻塞GUI线程。
3. 多媒体处理:在音视频处理中,需要同时进行多个任务,如播放、录制、转码等。
4. 数据库操作:在数据库操作中,可以使用多个线程同时进行查询或更新操作,提高数据库操作效率。
五、多线程的注意事项1. 线程安全问题:当多个线程同时访问同一资源时,可能会出现数据竞争和死锁等问题。
第十二章 Java多线程编程
一、线程及多线程的概念
多线程(Multi-Threads) 多线程是相对于单线程而言的,指的 是在一个程序中可以定义多个线程并同 时运行它们,每个线程可以执行不同的 任务。与多进程不同的是,同类多线程 共享一块内存空间和一组系统资源,所 以,系统创建多线程花费单价较小。因 此,也称线程为轻负荷进程。
例如:在线看电影,播放程序在播 放的同时也在下载。
一、线程及多线程的概念
线程与进程的区别
线程并不是一个完整的程序,它自己本身 并不能独立运行,只能包含在程序中、只 能在进程内部执行。
process process
一、线程及多线程的概念
线程与进程的区别
多个进程的内部数据和状态都是完全独立 的。 线程本身的数据通常只有寄存器数据,以 及一个程序执行时使用的堆栈,所以线程 的切换比进程切换的负担要小。 属于同一进程的所有线程共享该进程的内 存空间和一组系统资源,所以线程之间切 换的速度比进程切换要快得多。
三、多线程并发程序-线程同步 多线程并发程序临界区和线程同步 在多线程程序设计中,我们将程序中那些不能 被多个线程并发执行的代码段称为临界区。 当某个线程已处于临界区时,其他的线程就不 允许再进入临界区 。 实现方法:则是在共享代码之前加入synchronized段, 把共享代码包含在synchronized段中,格式如下:
二、线程的状态和生命周期
3.运行 当就绪状态的线程被调度并获得处理器 资源时,便进入运行状态。 run()方法 每一个Thread类及其子类的对象都有 一个重要的run()方法,当线程对象被调度 执行时,它将自动调用本对象的run()方法, 从第一句开始顺序执行。run()方法定义了 这一类线程的操作和功能。
二、Java中线程的创建 Java中线程的创建
程序、进程、作业、线程的关系
程序、进程、作业、线程的关系
⼀、程序:是⼀个包含了所有指令和数据的静态实体。
本⾝除占⽤磁盘的存储空间外,并不占⽤系统如CPU、内存等运⾏资源。
⼆、是⼀个程序在其⾃⾝虚拟地址空间的依次执⾏活动,是⼀个动态的执⾏过程,在执⾏过程中需要占⽤CPU、内存等运⾏资源。
程序和进程的区别:程序是静⽌的,进程是动态的,⼀个程序可以启动多个进程来共同完成。
三、作业:是⽤户提交给系统的⼀个正在执⾏的任务,这个任务有可能只需⼀个进程来完成,也有可能需要多个进程完成。
如:⽤户提交⼀个任务给系统以后,当该任务被调度室,系统会为此任务创建进程,改任务有时候可能只需创建⼀个进程即可完成、当有时候⼀个进程⽆法完成时,系统会为这个进程创建⼦进程,即⼀个任务需要多个进程才能完成。
进程·和作业的关系:有可能有⼀个进程完成作业,也有可能需要⼏个进程共同完成⼀个作业。
如:指令: ls -l
只是⼀个作业,只需启动⼀个进程即可。
指令:cat f1|grep "file"|wc -l
这个是⼀个作业,当却同时启动3个进程
四、线程:执⾏进程时,可能需要进程在同时刻能够作不⽌⼀件事,那么这些事就可以由线程去处理,即平常所说的多线程处理。
进程与线程
一:线程与进程1.概念线程:是程序执行流的最小单元,是系统独立调度和分配CPU (独立运行)的基本单位。
【操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是行程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。
在Unix System及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程称为线程。
计算机科学术语,指运行中的程序的调度单位。
】主要特点【在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。
线程具有以下属性。
1)轻型实体线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源,比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
2)独立调度和分派的基本单位。
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。
由于线程很“轻”,故线程的切换非常迅速且开销小。
3)可并发执行。
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行。
4)共享进程资源。
在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。
】线程的五大状态【线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。
1.新建状态(New):当用new操作符创建一个线程时,例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线程、进程、多线程、多进程和多任务之间的区别与联系可能学习操作系统开发的读者都听说过这些专业名词,但又多少人理解了?首先,从定义开始,先看一下教科书上进程和线程定义:进程:资源分配的最小单位。
线程:程序执行的最小单位。
1进程进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。
从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
举例说明进程:想象一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕,他有做生日蛋糕的食谱,厨房里有所需的原料:面粉、鸡蛋、糖、香草汁等。
在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法)计算机科学家就是处理器(CPU),而做蛋糕的各种原料就是输入数据。
进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和。
现在假设计算机科学家的儿子哭着跑了进来,说他的头被一只蜜蜂蛰了。
计算机科学家就记录下他照着食谱做到哪儿了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蛰伤。
这里,我们看到处理机制是从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。
当蜜蜂蛰伤处理完之后,这位计算机科学家又回来做蛋糕,从他离开时的那一步继续做下去。
2线程线程是CPU调度的最小单位(程序执行流的最小单元),它被包含在进程之中,是进程中的实际运作单元。
一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
一个标准的线程有线程ID、当前指令指针(PC),寄存器集合和堆栈组成。
另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单元,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
由于线程之间的相互制约,致使线程在运行中呈现处间断性。
线程也有就绪、阻塞和运行三种基本状态。
就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。
每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
举例说明线程:假设,一个文本程序,需要接受键盘输入,将内容显示在屏幕上,还需要保存信息到硬盘中。
若只有一个进程,势必造成同一时间只能干一样事的尴尬(当保存时,就不能通过键盘输入内容)。
若有多个进程,每个进程负责一个任务,进程A负责接收键盘输入的任务,进程B负责将内容显示在屏幕上的任务,进程C负责保存内容到硬盘中的任务。
这里进程A,B,C间的协作涉及到了进程通信问题,而且有共同都需要拥有的东西——-文本内容,不停的切换造成性能上的损失。
若有一种机制,可以使任务A,B,C共享资源,这样上下文切换所需要保存和恢复的内容就少了,同时又可以减少通信所带来的性能损耗,那就好了。
这种机制就是线程。
总的来说:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。
3多进程进程是程序在计算机上的一次执行活动,当你运行一个程序,你就启动了一个进程。
显然,程序是死的(静态的),进程是活的(动态的)。
进程可以分为系统进程和用户进程,凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;所有由用户启动的进程都是用户进程。
进程是操作系统进行资源分配的单位。
进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。
现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。
多任务带来的好处是明显的,比如你可以边听网易云音乐,一边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。
那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。
我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。
实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来 CPU是在轮流为多个进程服务,就好像所有的进程都在不间断地运行一样。
但实际上在任何一个时间内有且仅有一个进程占有CPU。
如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。
并行处理(Parallel Processing)是计算机系统中能同时执行两个或更多个处理的一种计算方法。
并行处理可同时工作于同一程序的不同方面。
并行处理的主要目的是节省大型和复杂问题的解决时间。
并发处理(concurrency Processing):指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机(CPU)上运行,但任一个时刻点上只有一个程序在处理机(CPU)上运行并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。
所以说,并行是并发的子集。
4多线程线程是程序中一个单一的顺序控制流程。
进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单元。
在单一程序中同时运行多个想成完成不同的工作,称为多线程。
多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。
线程是在同一时间需要完成多项任务的时候被实现的。
打个比方:多进程是立体交通系统(近似于立交桥),虽然造价高,上坡下坡多耗点油,但是不堵车。
多线程是平面交通系统,造价低,但红绿灯太多,老堵车。
5线程与进程的关系(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;(2)资源分配给进程,同一进程内的所有线程共享该进程的所有资源;(3)线程在执行过程中需要协作同步。
不同进程中的线程之间要利用消息通信的方法实现同步;(4)处理机分配给线程,即真正在处理机上运行的是线程;(5)线程是进程的一个执行单元,也是进程内的可调用实体。
6线程和进程的区别(1)线程共享内存空间;进程的内存是独立的;(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现;(3)创建新进程很简单;创建新进程需要对其父进程进行一个克隆;(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程;(5)改变注线程(如优先权),可能会影响其他线程;改变父进程,不影响子进程。
(6)调度:线程作为分配和调度的基本单位,进程作为拥有资源的基本单位(7)并发性:不进进程之间可以并发执行,同一进程内的线程也可以并发执行(8)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的系统资源(9)系统开销:在创建和撤销进程的时候,系统都要分配和回收资源,导致系统的明显大于创建和撤销线程时的开销。
但进程有独立的地址空间,进程崩溃后,在保护模式的下不会对其他进程造成影响,而线程只是进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有独立的地址空间,一个线程死后就等于整个进程死掉,所以多进程程序要比多线程程序健壮,但是在进程切换的时候消耗的资源较大,效率差。
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。
总结:多线程执行效率高; 多进程耗资源,安全。
7进程的优缺点7.1 进程的优点1)顺序程序的特点:具有封闭性和可再现性;2)程序的并发执行和资源共享。
多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。
7.2 进程的缺点操作系统调度切换多个线程要比切换调度进程在速度上快的多。
而且进程间内存无法共享,通讯也比较麻烦。
线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
8线程的优缺点8.1 线程的优点1)它是一种非常"节俭"的多任务操作方式。
在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。
而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
当然,在具体的系统上,这个数据可能会有较大的区别;2)线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;3)使多CPU系统更加有效。
操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;4)改善程序结构。
一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
8.2 线程的缺点1)调度时,要保存线程状态,频繁调度,需要占用大量的机时;2)程序设计上容易出错(线程同步问题)。
9多线程的优缺点9.1 多线程的优点1)无需跨进程边界;程序逻辑和控制方式简单;2)所有线程可以直接共享内存和变量等;3)线程方式消耗的总资源比进程方式好。
9.2 多线程的缺点1)每个线程与主程序共用地址空间,受限于2GB地址空间;2)线程之间的同步和加锁控制比较麻烦;一个线程的崩溃可能影响到整个程序的稳定性;3)到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;4)线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU 。
10多进程的优缺点10.1 多进程的优点1)每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;2)通过增加CPU,就可以容易扩充性能;3)可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;4)每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。