阿龙的学习笔记---《后台开发:核心技术与应用实践》读书笔记(三)--- 进线程通信、常用类库

三、进线程与进线程通信

  • 多线程操作使用pthread库来实现,可以传递参数,设置属性。

  • 多线程通信

    • 互斥锁,pthread_mutex_xxxx,(相当于二元信号量)。lock,trylock 和 unlock 进行操作。
    • 条件变量:pthread_cond_xxxx条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。条件操作可以不占用cpu,比如你一直判断某个条件是否成立,循环的话则会一直占用CPU。条件变量需要和互斥锁一起用。
    • 读写锁:pthread_rwlock_xxxx,有强读者模式和强写者模式。
    • 信号量:互斥锁相当于二元信号量,相当于将初始值设置为1,而信号量可以设置多初始值,适合用于比如一个营业厅能服务3个顾客这样的情况下进行同步操作。
  • 多线程可重入函数:多个任务并发使用时不会出问题,要使用本地变量或者使用全局变量时保护数据。一些库函数有可重入版本,在所有程序前定义宏_REENTRANT来告诉编译器需要可重入功能。

  • 僵尸进程和孤儿进程:父进程退出而子进程仍在运行是孤儿进程(没有父亲是孤儿);子进程退出而父进程没有wait时(子进程死了但没人管是僵尸)。僵尸进程父进程没有wait然后就退出了,那么就由僵尸进程编程了孤儿进程。

  • 守护进程:linux中的服务就是守护进程,脱离中断并在后台运行,避免执行过程中将信息显示在终端,并且不被终端的信息所打扰。可以通过一系列操作来实现运行一个守护进程。

  • 进程间通信:主要是linux进程间的通信方式 IPC

    • 管道(无名):父子或兄弟进程间的单向通信机制。有名管道也叫FIFO,可以实现不相关进程间的通信。
    • 消息队列:在系统内核中创建的用于通信的消息的队列,可在无关进程间通信,通过一个key来定位。用得少了。
    • 共享内存:两个不相关进程间的一块逻辑内存。创建后可以连接到自己的内存空间下,然后进行操作。两个进程可无关,通信效率高,直接读写内存而不需要传送。但是需要额外的同步机制来保证正确性。
    • 信号量:线程的是posix的信号量,进程间是SYSTEM V的信号量。

四、常用类库

  • json

    • 轻量级的数据交换格式,python下很好用,因为跟内置类型能一致,而C++中复杂一些。
    • 两种结构:一种是 键-值对 的集合,python中的字典;另一种是值的有序列表,即列表数组。
    • C++中需要通过json::value来获取格式中的内容。json::reader 和 json::writer 则是读写json字符串的方法。
  • Protobuf

    • Google背部的混合语言数据标准。轻便高效的结构化数据存储格式,大部分的RPC都是使用这个格式来传输数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值