
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都通过自学或者参加达内培训来实现互联网行业的转型发展,而本文我们就通过案例分析来了解一下,学习编程开发需要掌握哪些线程知识。
线程的介绍
线程是比进程更轻量级的调度执行单位,线程的引入可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址,文件IO等),又可以独立调度(线程是CPU调度执行的基本单位)。
线程的实现
线程的实现方式主要有三种方式:使用内核线程实现,使用用户线程实现和使用用户线程加轻量级进程混合实现。
内核线程实现
内核线程(KLT,Kernel-LevelThread),直接由操作系统内核(Kernel,即内核)支持的线程。
内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。
每个内核线程(逻辑内核)可以视为内核(物理内核)的一个分身,这样操作系统就有能力同时处理多件事情,支持多线程的内核叫做多线程内核(物理内核中有多个逻辑内核)。
轻量级进程技术(LWP)
程序一般不会去直接使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(LWP),即通常意义上的线程。
一个进程可以拥有多个轻量级进程,每个轻量级进程又有与之对应的内核线程(KLT)
由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。
轻量级进程与内核线程之间1:1关系称为一对一的线程模型。
通过内核调度器进行调度相关的内核线程去分配到不同的cpu处理器区执行(物理处理器)
内核线程保证了每个轻量级进程都成为一个独立的调度单元,即使有一个轻量级进程在系统调用中阻塞了,也不会影响整个进程的继续工作。
轻量级进程技术局限
基于内核线程实现,因此各线程操作等需要系统调用,系统调用代价高,需要在用户态和内核态来回切换,其次,每个轻量级进程都需要一个内核线程的支持,因此轻量级进程要消耗一定的内核资源,如内核线程的栈空间,因此一个系统支持轻量级进程的数量是有限的。
使用用户线程实现
广义上,内核线程以外,就是用户线程:轻量级进程也算用户线程,但轻量级进程的实现始终是建立在内核上的,许多操作都要进行系统调度,效率会受到限制。
狭义上,用户线程指完全建立在用户空间的线程库上。这种线程不需要切换内核态,效率非常高且低消耗,也可以支持规模更大的线程数量,部分高性能数据库中的多线程就是由用户线程实现的。
这种进程与用户线程之间1:N的关系称为一对多的线程模型。
用户线程优势在于不需要系统内核支援,劣势也在于没有系统内核的支援,所有的线程操作都是需要用户程序自己处理。
阻塞处理等问题的解决十分困难,甚至不可能完成。所以使用用户线程会非常复杂。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。