多线程创建:pthread()和clone()实现机制的异同

用户级线程与LWP

Pthread()是基于用户级线程来实现,而clone()是基于轻量级进程(LWP)来实现的。
对于用户级线程,是由用户空间运行线程库,使得任何应用程序都可以通过使用线程库被设计成多线程程序。所以对于线程的创建、消息的传递等都由线程库来完成,并且内核感知不到多线程的存在。而内核继续以进程为单位,给该进程一个执行状态。
在这里插入图片描述

而对于LWP而言,它是由内核支持的用户线程。正如图片里面显示的一样,它可以起到逻辑上对于用户线程和内核线程的连接。
在这里插入图片描述

事实上,它是基于内核线程的高级抽象,因此只有先支持内核线程,才会有LWP.由于LWP都与特定的内核线程关联,因此每个LWP都是独立的线程调度单元。即使有一个LWP在系统中阻塞,也不会影响到整个进程的执行。
LWP的局限性在于,大多数LWP的操作如建立、析构以及同步等,都需要经过内核的系统的调用,因此系统调用的代价比较高;需要在用户模式和内核模式中切换。
正因为系统调用的代价比较高,每个LWP都需要内核线程支持,消耗内核线程资源(栈空间),因此一个系统不能支持大量的LWP。

不同点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值