定义
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
特征
轻型实体 |
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。 |
独立调度和独立运行的基本单位 |
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。 |
可并发执行 |
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行 |
共享进程资源 |
在同一进程中的各个线程,都可以共享该进程所拥有的资源 |
为何要有线程
60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。
线程比进程好在哪
线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。因而近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。
多线程
定义
多线程就是指一个进程中同时有多个线程正在执行
为什么要使用多线程
- 在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。
- 可以提高程序的效率。
缺点
- 使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要更多内存。
- 影响系统性能,因为操作系统需要在线程之间来回切换。
- 需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响。
注意
多线程是异步的,但这不代表多线程真的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换(因为系统切换的速度非常的快,所以给我们在同时运行的错觉)。
同一进程中线程的关系
- 在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。
- 同一个进程内的线程之间互相通信不必调用内核,因为同一个进程内的线程共享文件和内存,
- 同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)
详细解释
https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101?fr=aladdin