线程

一、线程的概念

        线程,有时被称为轻量级进程(LWP),是程序执行的最小单元。一个标准的线程由线程ID,当前指针(PC),寄存器集合和堆栈组成。另外,线程是一个进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并行执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行 ,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序至少有一个 线程,若程序只有一个线程,那就是程序本身。

        线程是程序中一个单一的顺序控制流程。进程内一个独立的、可调度的执行单元,是系统独立调度和分配CPU的基本单位。在一个单个程序中同时运行多个线程完成不同的工作,称为多线程。

二、线程的分类

        线程有俩个基本类型:

        用户级线程:管理过程全部由用户完成,操作系统内核心只对进程进行管理。

        系统级线程(核心级线程):有操作系统内核进行管理。操作系统 内核给应用程序提供相应的系统调用和应用程序接口API,一使用户程序可以创建、执行和撤销线程。

三、属性

        1>轻型实体:线程的实体基本上不拥有系统资源;

        2>独立调度和分派的基本单元:在多线程OS中,线程是能独立运行的基本单元,因此也是独立调度和分派的基本单元。由于线程很“轻”,故线程的切换非常迅速并开销小;

        3>可并发执行:在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行。

        4>共享进程资源:在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚拟地址;此外,还可以访问进程所拥有的一打开文件,定时器、信号量机构等。

四、进程与线程的比较

        进程和线程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间 ,每一个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要计算机的内存资源和CPU。

        通常在一个进程中包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单元。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小很多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。

        线程与进程区别可以归纳为以下几点:

                1>地址空间和其他资源(如打开文件):进程间相互独立,同一进程的个线程共享。某进程内的线程在其他进程不可见。

                2>通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,与保证数据的一致性。

                3>调度和切换:线程上下文切换比进程上下文切换要快得多。

                4>在多线程OS中,进程不是一个可执行的实体。

五、线程的创建、等待和结束的代码实现

程序代码:

#include<stdio.h>
#include<pthread.h>

void * thread_run(void* arg){
printf("I am %s\n",(char*)arg);
//线程的结束
return (void *)1;
}

//主函数
int main(){
pthread_t tid;
//线程的创建
pthread_create(&tid,NULL,thread_run,"thread 1");
//线程的等待
void* ret;
pthread_join(tid,&ret);
printf("main thread run new thread ret:%d\n",(int)ret);
return 0;

}

检测结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值