内核线程与用户线程区别同步互斥的实现原理——详解

Posted 西邮菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核线程与用户线程区别同步互斥的实现原理——详解相关的知识,希望对你有一定的参考价值。

一、内核线程与用户线程区别

根据操作系统对线程是否可以感知,将线程分为内核线程与用户线程。内核线程的活动都是内核操作完成的,而用户线程的操作都是利用线程库来调用完成的。

1.1 线程实现的方式

内核线程:为了实现线程,内核里就需要有用来记录系统里所有线程的线程表。当需要创建一个新线程的时候,就需要进行一个系统调用,然后由操作系统进行线程表的更新。

用户线程:将创建线程与销毁线程的函数放入了线程库,调用API函数来创建用户线程。

1.2 线程切换时的消耗

内核线程:因为内核线程在调度时操作系统需要从用户态转变为内核态,切换完成后还需要进行切换,所以代价比较大。

用户线程:可在当前的进程环境内进行切换。

1.3 生成线程数量限制

内核线程:因为操作系统内有一个线程表进行控制,线程表是存放在操作系统固定的表格空间或者堆栈空间里,所以内核级线程的数量是有限的,扩展性比不上用户级线程

用户线程:每个进程都可以创建许多自己的线程。

1.4 线程之间的影响

内核线程:一个线程阻塞,其他线程继续运行也可以提高多CPU处理器的效率。

用户线程:进程被阻塞,他的所有线程都会被阻塞。

1.5 调度的灵活性

内核线程:有固定的调度算法,为了不影响操作系统稳定性,所以尽量不改动。

用户线程:可以根据自己的需求设置调度算法。

一个图表示区别:

 二、操作系统线程同步、互斥的实现

临界区:当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。

事件:通过线程间触发事件实现同步互斥。

互斥量 :适合不同进程内多线程访问公共区域或代码段时使用,与临界区相似。

信号量:与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,先设置一个访问公共区域的线程最大连接数,每有一个线程访问共享区资源数就减一,直到资源数小于等于零。

以上是关于内核线程与用户线程区别同步互斥的实现原理——详解的主要内容,如果未能解决你的问题,请参考以下文章

LINXU多线程(进程与线程区别,互斥同步)

详解线程同步和线程互斥,Java如何实现线程同步和互斥

并发与多线程——同步与互斥

线程与进程

Linux线程安全

Linux线程安全