博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程简单介绍
阅读量:6069 次
发布时间:2019-06-20

本文共 1578 字,大约阅读时间需要 5 分钟。

一. 什么是线程
    在一个程序里的一个运行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列"
    一切进程至少都有一个运行线程.
二. 进程与线程
    进程是资源竞争的基本单位
    线程是程序运行的对小单位
    线程共享进程数据,但也拥有自己的一部分数据
        线程ID
        一组寄存器
        栈
        errno
        信号状态
        优先级
三. fork 和创建新线程的差别
    当一个进程运行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它的自己的PID.
这个新进程的执行时间是独立,它在执行时差点儿全然独立创建它的进程.
    在进程里面创建一个新线程的时候,新的运行线程会拥有自己的堆栈(因此也就有自己的局部变量),但要与它的创建者共享全局变量,文件描写叙述符,信号处理器和当前的工作文件夹状态
.
四. 线程的长处
    (1) 创建一个新线程的代价要比创建一个新进程小的多
    (2) 与进程之间的切换相比,线程之间的切换须要操作系统做的工作要少的多
    (3) 线程占用的资源要比进程少的多
    (4) 能充分利用多处理器的可并行数量
    (5) 在等待慢速I/O操作结束的同一时候,程序可运行其它的计算任务.
    (6) 计算密集型应用,为了能在多处理器系统上执行,将计算分解到多个线程中实现.
    (7) I/O密集型应用,为了提高性能,将I/O操作重叠.线程能够同一时候等待不同的I/O操作
.
五. 线程的缺点
    (1)等候使用共享资源时造成程序的执行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
    (2)对线程进行管理要求额外的 CPU开销。

线程的使用会给系统带来上下文切换的额外负担。

当这样的负担超过一定程度时,多线程的特点主要表如今其缺点上,比方用独立的线程来更新数组内每一个元素。

    (3)线程的死锁。

即较长时间的等待或资源竞争以及死锁等多线程症状。

    (4)对公有变量的同一时候读或写。

当多个线程须要对公有变量进行写操作时,后一个线程往往会改动掉前一个线程存放的数据,从而使前一个线程的參数被改动;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这样的错误是程序猿无法预知的

    
六: 三种线程模型
    N:1 用户线程模型
    1:1 核心线程模型
    N:M 混合线程模型

     (1)N:1 用户线程模型

    "线程实现"建立在"进程控制"机制之上,由用户空间的程序库来管理. OS内核全然不知道线程信息.这些线程称为用户空间线程

    这些线程工作在"进程竞争范围"

    在N:1线程模型中,内核不干涉线程的不论什么生命活动,也不干涉同一进程中的线程环境切换.

    在N:1线程模型中,一个进程中的多个线程仅仅能调度到一个CPU,这样的约束限制了可用的并行总量.
    第二个缺点是假设某个线程运行了一个"堵塞式"操作(如read),那么,进程中的全部线程都会堵塞,直至那个操作结束.为此,一些线程的实现是为这些堵塞式函数提供包装器,用非堵塞版本号替换这些系统调用,以消除这样的限制.

    (2)1:1 核心线程模型

       在1:1 核心线程模型中,应用程序创建的每个线程都由一个核心线程直接管理
       OS内核将每个核心线程都调用到系统CPU上,因此,全部线程都工作在"系统竞争范围".
       这样的线程的创建与调度由内核完毕,由于这样的线程的系统开销比較大(但一般比进程开销小)

    (3)N:M 混合线程模型

    N:M混合线程模型提供了两级控制,将用户线程映射为系统的可调度以实现并行,这个可调度称为轻量级进程(LWP:light weight process),LWP 再一一映射到核心线程.

   

    
  

转载于:https://www.cnblogs.com/yutingliuyl/p/6898898.html

你可能感兴趣的文章
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
复杂业务下,我们为何选择Akka作为异步通信框架?
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>