Linux系统分析之线程

什么是线程

 

Linux线程是一类特殊的进程,拥有各自的task_struct,内核并没有特别的调度算法和数据结构来表征线程,而仅仅是作为一个普通的进程,只是和其他进程共享进程空间。也就是说,如果程序运行于多线程环境,编写程序时必须检查一下项目:

  • 是否使用了不可重入的系统函数,例如字符串分割函数::strtok();
  • 是否已经对全局变量或静态变量进行了加锁;
  • 第三方库是否支持多线程。

 

注:想要从核心获取线程id,应当使用current->pid。在核心里pid对进程而言是进程号,对于线程是线程号。同一进程的不同线程的pid是不同的,但同一进程的不同线程有统一的tgid,所以像getpid(),kill()等这种系统调用返回的都是tgid的值。

 

线程的调度

 

如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间片,再将时间片分配给各个线程执行,在一个时间片的线程代码运行时,其它线程处于挂起状态,这种方式称之为并发(Concurrent)

 

因为I/O操作速度远远慢于CPU处理速度,键鼠输入、硬盘读写、网络传输等速度远慢于内存读写速度,而内存速度又远慢于CPU缓存速度,所以有效的利用I/O操作间隙时的CPU,成为早期单核并发机制的来由。在并发环境下,CPU以”挂起->执

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值