并发编程
文章平均质量分 95
以实战为主线,从浅到深逐步介绍并发编程的核心知识,在SMP架构系统下需要用到的并发性能相关的要点,不仅满足面试需求,而且让自己的技能提升到并发架构的层次。
韩楚风
多年服务端开发经验,目前在做数据库内核研发,希望和大家多交流数据库和产品研发方面的经验^.^
展开
-
【linux 多线程并发】多线程模型下的信号通信处理,与多进程处理的比较,属于相同进程的线程信号分发机制
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-11 08:22:28 · 5004 阅读 · 133 评论 -
【linux 多线程并发】多线程的控制,挂起线程暂停运行,直到唤醒线程,取消线程运行,可以设置合适的取消点属性避免不安全点被中止
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-18 15:00:00 · 5451 阅读 · 83 评论 -
【linux 多线程并发】线程退出自动清理函数的使用,释放线程申请的资源,异常退出自动调用
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-11 05:00:00 · 7589 阅读 · 141 评论 -
【linux 多线程并发】线程本地数据存储的两种方式,每个线程可以有同名全局私有数据,以及两种方式的性能分析
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-09 01:00:00 · 6483 阅读 · 115 评论 -
【linux 多线程并发】多任务调度器,调度策略时间片轮转,先进先出,多种实时任务的策略,内核级最高优先级调度策略
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-04 00:45:00 · 6707 阅读 · 154 评论 -
【linux 多线程并发】线程属性设置与查看,绑定CPU,线程分离与可连接,避够多线程下的内存泄漏
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2024-01-01 10:44:31 · 6608 阅读 · 115 评论 -
【linux c多线程】线程的创建,线程信息的获取,获取线程返回值
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。原创 2023-12-26 00:15:00 · 7997 阅读 · 147 评论 -
linux barrier 栅栏屏障,让多任务在栅栏处集合,全部到齐后同时出发
pthread_barrier_t 这是posix定义线程同步方法,不一定所有linux 版本中都实现了它。barrier 是一种非常有效的线程同步方法,当我们需要几个线程一起开始时,或者在某个条件下需要一起等待时,就需要有个类似栅栏一样的东西,条件成立时,就会被拦住。当然这个功能,也可能通过管道,信号量,eventfd等方法实现,但是barrier非常简单高效。原创 2023-07-26 08:28:56 · 5829 阅读 · 75 评论 -
linux 信号原理 信号处理设置signal, 信号发送kill,信号等待sigsuspend,信号阻塞sigprocmask,一网打尽信号使用
信号是一种软中断的方式,让进程陷入中断处理调用中;linux 下信号也是一种进程间通信的手段;进程间也可以互相发送信号,来传递状态,让对方获知,并处理一些事情。原创 2023-07-10 08:00:00 · 6803 阅读 · 58 评论 -
linux 文件锁flock与fcntl bytes级别精细控制不再是困难
前面博客介绍了多任务下互斥的方法,如信号量,互斥锁,管道,事件通知等等,这些可以对内存或者关键资源进行同步处理。但是对于文件,有没有单独的方法呢?本文就来介绍文件锁,来避够文件的多任务下的写覆盖,脏读等问题。一般的互斥方法,如互斥锁,一个任务加锁后,另一个任务如果不调用加锁接口 flock fcntl ,直接访问共享资源,那么这就破坏了使用规则。建议模式的文件锁效果也是类似,任何任务里面,需要调用加锁/解锁函数,才能达到互斥访问的保护,直接访问文件就会破坏规则。这就是建议锁模式,基于大家的遵章守法基础上。原创 2023-06-30 13:10:47 · 5377 阅读 · 20 评论 -
linux eventfd事件通知 比信号量更好用
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。eventfd 就是一个用于事件通知的fd。当然linux中,一切都可以做为文件来看待,所以就有fd。这样有一个好处管理统一,比如可以加入到epoll事件等待中。很多人可能没怎么用,但是用过的人都说:香!eventfd 提供了一个进程/线程间通信的方式。这个方式是载体是一个句柄,也就是fd,类型是eventfd,可以在/proc下查看fd时看到;原创 2023-06-13 08:33:42 · 6667 阅读 · 21 评论 -
linux 条件变量 pthread_cond_signal
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。条件变量,根据某个条件进行触发pthread_cond_signal/pthread_cond_broadcas,条件达不到时就等待,而不用我们不断检测。原创 2023-05-28 22:15:00 · 8740 阅读 · 5 评论 -
linux 读写锁 pthread_rwlock
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。与前面介绍的互斥量,信号量类似,用于多线程/进程间同步控制,但与它们的不同之处在于,读写锁pthread_rwlock_t可以区分读加锁pthread_rwlock_rdlock和写加锁,也就是说一把锁有两种不同的加锁方式,那么对于两种加锁方式下的并发控制也是不同。这个不同点,也就是读写锁的精妙的所在。当然定义了还不能用,此时状态未知,必须初始化后才能用。原创 2023-05-21 22:00:00 · 6169 阅读 · 3 评论 -
linux 互斥量pthread_mutex
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。本文主要介绍并发编程中的互斥量,linux中提供了一系列pthread_mutex打头的接口完成互斥量的功能。它不同于信号量,在并发编程中应用非常广泛。原创 2023-05-07 22:15:00 · 5538 阅读 · 0 评论 -
linux 信号量semget/semop/semctl
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。信号量semget/semop/semctl提供了多任务间的同步机制,生产者产生后,消费者才能消费,避免消费者提前消费的问题。原创 2023-04-23 22:00:00 · 5869 阅读 · 0 评论 -
linux 匿名文件 memfd_create
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。本专栏已经分享共享内存,文件映射,匿名/命名管道,消息队列等四种进程间通信的方式,本文来介绍第五种方式memfd_create,而且非常特别,且看本文分解。原创 2023-04-16 20:43:22 · 6228 阅读 · 0 评论 -
linux 消息队列 msgget/msgsnd/msgrecv
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。进程间传递数据,在本专栏已经分享过共享内存,匿名/命名管道,文件映射等,今天给大家再分享一种msgget/msgsnd/msgrecv可以通过消息包方式传递,类似于socket的方式,使用更加便捷。原创 2023-04-16 20:29:57 · 5625 阅读 · 0 评论 -
linux 匿名管道 pipe
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。概述管道是在进程间进行通信的一种方式。在不同进程和程序间如何传递少量数据,且能阻塞形式使用,这就用到了管道。管道分为两种,无名管道pipe和命名管道mkfifo,因为子进程可以复制父进程的进程上下文,所以无名管道用在父子进程间,而命名管道在不同进程间通过路径名进行共享,更加通用。原理介绍基本原理无名管道是一种在内存中创建的管道,只能在相关进程间使用。原创 2023-04-09 20:53:34 · 5364 阅读 · 1 评论 -
linux 命名管道 mkfifo
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。在不同进程和程序间如何传递少量数据,且能阻塞形式使用,这就用到了管道。管道分为两种,无名管道和命名管道,因为子进程可以复制父进程的进程上下文,所以无名管道用在父子进程间,而命名管道mkfifo在不同进程间通过路径名进行共享,更加通用。命名管道是一种在进程间进行通信的机制,它可以用于在两个进程间进行数据传输。原创 2023-04-08 22:15:45 · 5291 阅读 · 0 评论 -
linux 共享内存 shmget
本专栏主要分享linux下并发编程相关知识,包括多进程,多线程,进程/线程间通信,并发同步控制,以及高并发下性能提升,请大家多多留言。共享内存是进程间通信的一种常用手段,相较于其它通信方法,它可以在进程间传递大量的不同格式的数据,同时这些数据不需要持久保存在磁盘上。原创 2023-04-04 08:22:16 · 2323 阅读 · 1 评论 -
linux 进程创建的五种方法fork/vfork/execv/clone
本专栏介绍:以实战为主线,从浅到深逐步介绍并发编程的核心知识,在SMP架构系统下需要用到的并发性能相关的要点,不仅满足面试需求,而且让自己的技能提升到并发架构的层次。在linux中每个进程都有一个编号号PID,它的父进程的编号为PPID。当我们用ps -ef查看时,就可以看到每个进程的PID和PPID。我们发现,Linux下最原始的PID为0,由它产生了两个PID分别1,2的子进程,后面的进程的PPID都为1或2。进程创建方式fork,execv,vfork,clone,后台进程介绍和编码例子。原创 2023-03-28 13:15:47 · 3355 阅读 · 1 评论