什么是进程和线程 线程与进程的区别

一、线程与进程的区别
先简单说说线程与进程的概念:
(1)进程是指一个内存中运行的应用程序 , 比如在Windows系统中 , 一个运行的exe就是一个进程 。
(2)线程是指进程中的一个执行流程 。
区别:
一个程序至少有一个进程 , 而一个进程至少有一个线程 。一个应用程序可以同时启动多个进程 。例如对于IE浏览器程序 , 每打开一个IE浏览器窗口 , 就启动了一个新的进程 。而线程则是指进程中的一个执行流程 , 一个进程可以有多个线程 , 每个线程分别执行不同的任务 , 当进程内的多个线程同时运行时 , 这种运行方式就被称为并发运行 。
另外 , 线程与进程还有一个非常重要的区别:每个进程在执行过程中都拥有独立的内存单元 , 而同一个进程中的多个线程则共享内存 , 从而极大地提高了程序的运行效率 。
二、对多线程并发的理解
多线程并发只是表面和感觉上的并发 , 并不是实质上的并发 。一个线程要运行 , 它必须占有CPU , 而我们目前用的计算机大多都是单CPU的 , 所以一次最多只能有一个线程获取CPU并运行 。
多线程的实质是“最大限度地利用CPU资源” , 当某一个线程的处理不需要占用CPU而只需要和I/O等资源打交道时 , 让其他线程有机会获得CPU资源 。这有点类似于“统筹方法” , 例如让你打扫房子和烧水 , 要在最短的时间内做好这两件事 , 你一定会想到先把水烧上 , 然后在等水烧开的空闲时间中去打扫房子 , 而不是先打扫好了再去烧水 , 也不是先烧好了再去打扫 , 这个例子里面 , 你是那个唯一的CPU , 而烧水和打扫就是两个线程 。
虽然CPU只有一个 , 但是它在多个线程之间频繁切换 , 当切换的频率高到一定程度时 , 我们就感觉所有的线程在同时运行 , 于是感觉这多个线程是并发的 。因此 , 并发并不是真的指多个线程同时运行 , 它仅仅只是形容一种现象 。就好像说有些人是“铁人”一样 , 仅仅只是用于形容某个人不怕苦不怕累 , 像个“铁人” 。
1. 并发:在操作系统中 , 是指一个时间段中有几个程序都处于已启动运行到运行完毕之间 , 且这几个程序都是在同一个处理机上运行 。其中两种并发关系分别是同步和互斥
2. 互斥:进程间相互排斥的使用临界资源的现象 , 就叫互斥 。
3. 同步:进程之间的关系不是相互排斥临界资源的关系 , 而是相互依赖的关系 。进一步的说明:就是前一个进程的输出作为后一个进程的输入 , 当第一个进程没有输出时第二个进程必须等待 。具有同步关系的一组并发进程相互发送的信息称为消息或事件 。
其中并发又有伪并发和真并发 , 伪并发是指单核处理器的并发 , 真并发是指多核处理器的并发 。
4. 并行:在单处理器中多道程序设计系统中 , 进程被交替执行 , 表现出一种并发的外部特种;在多处理器系统中 , 进程不仅可以交替执行 , 而且可以重叠执行 。在多处理器上的程序才可实现并行处理 。从而可知 , 并行是针对多处理器而言的 。并行是同时发生的多个并发事件 , 具有并发的含义 , 但并发不一定并行 , 也亦是说并发事件之间不一定要同一时刻发生 。