首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >线程有几种通讯方式

线程有几种通讯方式

作者头像
早起的鸟儿有虫吃
发布2021-05-17 16:05:33
发布2021-05-17 16:05:33
2.1K0
举报
文章被收录于专栏:算法之美算法之美

线程有几种通讯方式?

回答:

  • 消息传递方式(管道pipe,FIfo,消息队列 message queue,远程调用rpc,信号).
  • 共享内存方式(进程在os开辟,线程是进程本身)

上面2个方式都需要同步,都需要借助锁,条件变量,信号方式。 你说同步方式属于通讯模型吗 ?不算,应该2种

提示线索

  • 进程的通讯机制(ipc)也适合线程,线程的通讯方式也适合进程。
  • UNIX网络编程卷2:进程间通信

难点

  1. 消息传递 如何判断队列消息可以防止消息不丢失。
  • 异步信号
  • epoll检查
  • 条件变量
  1. 共享内存:如何保证线程安全
  • 互斥锁
  • 原子锁
  • 自旋锁
代码语言:javascript
复制
https://en.cppreference.com/w/cpp/atomic/memory_order
typedef enum memory_order {
    memory_order_relaxed,
    memory_order_consume, //读取:别的线程已经写入的变量,我能正确读取
    memory_order_acquire,
    memory_order_release,//写入:我已经写入的变量,别线程能正确读取。
    memory_order_acq_rel,
    memory_order_seq_cst
} memory_order;通过栅栏控制的,不能提前读取,不能延迟写入。

隐藏副本

  • 别人问的是通讯模型,而不是期望记忆各种东西。太琐事

思路与行动

在项目中,你采取哪种方式?

我经常听说他们用消息中间件RocketMQ, 欢迎留言

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 线程有几种通讯方式?
  • 提示线索
  • 难点
  • 隐藏副本
  • 思路与行动
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档