线程1--线程和进程的区别和其他术语

进程(process)和线程(thread)是操作系统的基本概念。
进程和线程都是CPU工作时间段的描述。

背景:由于CPU与其他PC资源之间速度的不协调,人们想提高资源利用率,所以提出了多任务系统。得益于CPU的计算速度,我们可以“同时”运行多个任务,实质上是多个任务之间轮流使用CPU资源,由于速度超快,给用户的感觉就是连续的。

如何实现:任务的执行需要依赖各个PC资源,我们可以称为计算机执行的上下文环境。要实现“同时执行”,就需要不断轮换,为了下一次继续从当前状态执行下去,计算机需要保存切换前的程序上下文。所以有了进程:用进程去描述程序当前上下文的状态信息----内存位置、变量值、任务ID……所以,进程是资源分配的单位。一般来说宏观上可以看做是一个软件的运行,例如一个word文档的打开。

多个任务之间切换因为要保存上下文、调入上下文,一旦多了的时候,还是有一定的时间消耗。为了进一步提高资源利用率,人们在进程中,引入了线程,线程只是CPU轮流调度的单位,其他上下文信息用所在进程中的。这样上下文切换的耗时就降了下来。同样的,宏观上来可以看做是一个软件中的多个处理功能,例如上述打开word中拼写检查功能、字体加粗……

区别:
进程:
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配的独立单位。
进程之间的地址空间是相互独立的,每个进程都是用虚拟地址空间,每个进程都以为整个地址空间只有自已在运行。操作系统在进行进程切换时,要把每个进程的上下文保存完整;
进程之间不能共享资源;
进程切换的开销较大。

线程:
线程是进程中的一个执行路径。(进程可以创建多个线程);
线程是CPU调度的单位;
线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器;
线程没有自己独立的地址空间,线程必须依赖于进程而存在;
线程切换的开销相对较小。

其他术语:
并发:
Concurrency,是并发的意思。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
从微观角度看,所有的并发处理都有排队等候、唤醒、执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。
从宏观角度看,多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。

并行:
Parallelism,即并行,指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源呢上(多核),同时执行。并行,不存在像并发那样竞争,等待的概念。

通过多线程实现并发,并行:
1.java中的Thread类定义了多线程,通过多线程可以实现并发或并行。
2.在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。
3.在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。
4.至于多线程实现的是并发还是并行?上面所说,所写多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,如果有人问我我所写的多线程是并发还是并行的?我会说,都有可能。
5.不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。

串行、并行:
并行和串行指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行指的是多个任务可以同时执行,异步是多个任务并行的前提条件。

异步和同步
异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

并发编程又叫多线程编程
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.内存的页面置换算法 (1)最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的...
    杰伦哎呦哎呦阅读 8,692评论 1 9
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 11,206评论 3 28
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,615评论 0 23
  • 7月18日具身认知 4:55-5:08听 5:08-6:10第一遍写-脱稿 6:15-6:42第二遍写-边听边记录...
    zazabo阅读 4,099评论 0 0
  • 她三十岁,人俏,白白的皮肤,细细的腰。不过,她命不好,先是生下傻闺女,再就是,二十九岁那年,丈夫死了。 后来,她选...
    Allie__阅读 3,723评论 2 8