理解操作系统5——多线程

线程:

线程就是程序中的一条控制流,多线程就是多条控制流;线程是在进程的基础上,进一步划分;

进程是资源的基本单元;线程是调度的基本单位; 一个进程至少有一个线程,或多个线程;

 

进程更像操作系统对资源分配的单位;

线程是操作系统对处理机调度的单位;

 

线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属于一个进程的其他进程共享进程所拥有的全部资源。

 

程序执行流的最小单元。一个标准的线程由:线程ID、当前指令指针、寄存器集合、堆栈组成。

线程是进程中的实体,是被系统独立调度和分派的基本单位。

线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属于一个进程的其他进程共享进程所拥有的全部资源。

同一进程中的多个线程之间可以并发执行,由于线程之间的相互制约,致使线程再运行中呈现出间断性。线程有:就绪、阻塞、运行三种基本状态。

  就绪:具备运行的所有条件,逻辑上可以运行,在等待处理机;

  运行:指线程占有处理机正在运行;

  阻塞:线程再等待一个事件(如某个信号量),逻辑上不可运行。

 

线程是程序中一个单一的顺序控制流程;

 

进程内有一个相对独立的、可调度的执行单元。是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。

 

 

和进程的关系:

进程是资源分配的基本单位,线程是任务调度的基本单位;

线程实际上是轻量级进程,和进程可以看作是包含关系。没有线程的进程叫做单线程,一个进程可以有多个线程。线程是在进程的基础上继续划分线程;

进程有独立的代码和数据空间,进程的切换开销较大;线程可以看成轻量级进程,同一类线程共享代码和数据空间,但是线程有独立的栈和程序计数器PC,线程之间的切换开销小;

 

线程的状态:

同一进程中的多个线程之间可以并发执行,由于线程之间的相互制约,致使线程在运行中呈现出间断性。

线程有:就绪、阻塞、运行三种基本状态。

就绪:具备运行的所有条件,逻辑上可以运行,在等待处理机;

运行:指线程占有处理机正在运行;

阻塞:线程再等待一个事件(如某个信号量),逻辑上不可运行。

 

线程的意义:

进一步提升并发性,克服了进程的切换开销大的缺陷,减少时空开销;

线程进程都是由操作系统所体会的程序运行的基本单元。利用该基本单元实现系统对应用的并发性。线程的划分尺度更小,并发性更高

 

进程在执行的过程中有独立的内存单元。而多个线程共享内存,极大提高了程序的运行效率。

每个独立的线程有一个程序运行的入口(入口函数),顺序执行序列和程序的出口。但是线程不能独立执行,必须依赖在应用程序中。

从逻辑角度看:多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看成独立的应用,来进行进程的调度和管理以及资源分配。

进程是系统进行资源分配和调度的一个独立单位。

===================================================

线程安全:

进程之间有独立的内存空间,相互之间访问不到。

但是进程中有多个线程。每个线程都有各自的栈内存,这个栈内存也是各个线程自己私有的,别人访问不到;

但是进程中有公共的堆空间,是多个线程都可以访问得到的空间。如果大家都能访问到这个空间中的某个对象或方法。

那就存在数据被意外修改的风险,使得某个线程的数据被污染。这就是线程安全问题。

非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。

 

为例保证线程安全,于是就有了一些机制:

例如CAS(compare and swap),保存数据的状态然后检查数据是否被修改了,被修改的话,就重头再来。->开销较大,适用于线程不多,数据被修改的概率不大,但是存在这种可能;

还有一种是加锁机制->也是有开销的,但是能保证数据不被修改,适用于线程较多,大概率数据会被修改的情况;

当我们用一些机制保证线程安全时,其实是存在一些代价的,就是增加了系统开销,导致性能下降。所以要根据实际情况取舍。

 

线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。

所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

非线程安全!=不安全

 

线程安全相关链接:

线程安全这么回答才牛逼:https://www.cnblogs.com/qiu18359243869/p/11009883.html

Java中的线程安全和非安全:https://www.cnblogs.com/lijingran/p/8722301.html

什么是线程安全:https://www.jianshu.com/p/f99a04cff60a

什么是线程安全:https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html#4249651#undefined

===================================================

相关链接:

线程的意义与常见面试题:https://www.cnblogs.com/yanglin666/p/10551661.html

多线程使用的主要目的:https://blog.csdn.net/qq_34512307/article/details/77283870

多线程的实际意义和优势:https://blog.csdn.net/liu123641191/article/details/80904522

多线程的优点和意义:https://blog.csdn.net/xiaokangboy/article/details/77969758

多线程的意义和线程的生命周期:https://baijiahao.baidu.com/s?id=1637095684358533046&wfr=spider&for=pc

 

posted @ 2019-09-29 00:50  Grooovvve  阅读(465)  评论(0编辑  收藏  举报