线程学习笔记

为什么要有多进程?
因为操作系统需要多任务同时执行

进程的缺点
1.进程切换开销大
linux下是进程执行是按时间片的轮询进行,这就涉及到进程在切换时断点的保护和恢复
2.进程间通信效率低

解决进程缺点就是线程技术
1.线程技术保留了进程技术实现多任务的特性
2.线程改进了在线程间切换和线程间通信效率(线程共享了同一虚拟地址)
3.多线程在多核CPU上效率高,为什么?
因为多进程没法保证每个进程可以同时运行在多核上,而线程可以

软件多于多核进程的优化是啥意思?
其实就是多进程到多线程的切换

什么是线程
1.线程是内核调度的最小单元,而不是进程,是调度进程里面的线程
2.一个进程可以包含多个线程

拓展,怎么看CPU的核数
1.总核数 = 物理CPU个数*每颗物理CPU的核数
2.总逻辑CPU个数 = 物理CPU个数每颗物理CPU的核数超线程数
超线程,即CPU的每颗核心可以当两个核用,虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。
当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

p是指posix
线程创建与回收
pthread_create 主线程用来创建子线程
pthread_join 主线程用来等待(阻塞)回收子线程
pthread_detach 主线程用来分离子线程,分离后主线程不必再去回收子线程

线程取消
pthread_cancel 一般都是主线程调用该函数去取消子线程
pthread_setcancelstate 子线程设置自己是否允许被取消
pthread_setcanceltype 子线程设置自己取消的类型

线程函数退出相关函数
pthread_exit和return
pthread_cleanup_push 往一个栈中放入一个方法,如果线程被取消了,则执行栈中的方法(可以用于同步过程中线程被取消而锁也异常了)
pthread_cleanup_pop 从栈中弹出一个方法,可以执行,也可以不执行

获取线程id
pthread_self

线程同步之信号量
sem_init 初始信号量
sem_wait 拿不到信号量会阻塞
sem_post 对信号量做加操作
sem_destroy 销毁信号量

线程同步之互斥锁
互斥锁又叫互斥量(mutex),涉及相关函数
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_unlock
互斥锁和信号量有啥关系
1.可以认为互斥锁是一种特殊的信号量
2.互斥锁是只有0和1的信号量
3.互斥锁主要用来实现关键代码段保护

线程同步之条件变量
条件变量和互斥锁有关,感觉就像是对互斥锁进一层封装
相关函数
pthread_cond_init
pthread_cond_wait
pthread_cond_destroy
pthread_cond_signal(唤醒一个)/pthread_cond_broadcast(唤醒多个)

其实在进程表_eprocess中就有一个结构存放互斥量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值