码迷,mamicode.com
首页 > 编程语言 > 详细

并发线程/进程的通信

时间:2019-12-29 12:44:40      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:机制   网络协议   在线   一般来说   区域   ace   并发   类的方法   基于   

一般来说并发通信有两种策略:共享数据(内存)和消息传递。

共享数据(内存)适用的场景:

1、速度要求高

2、一个写进程,多个读进程

3、共享内存更适合单机多核的并发编程

共享数据的问题:

1、需要解决条件竞争和线程/进程同步问题(线程锁,互斥量,信号量)

2、大量的上下文切换

基于共享内存的并发模型的应用:开源量化项目——功夫

功夫使用共享内存作为核心通信机制。在通信延迟这个指标上,共享内存远远领先于其他一切诸如消息队列、网络协议之类的方法。

使用内存映射文件之后,在解决通信问题的同时,还同时得到了实时存储的能力,因为 mmap 的运行原理是,操作系统会在后台 kernel

进程中保证磁盘上的映射文件内容和内存映射区域同步,使得你对该内存的任何写入操作,都会异步的持久化到磁盘上。

 

消息传递:

1、不会产生数据竞争状态(data race)。

2、适用于分布式高并发的场景。

实现消息传递有两种常见的类型:

  • 基于channel的消息传递。
  • 基于Actor的消息传递。

基于Actor的消息传递的应用:ZMQ

ØMQ需要充分利用多核的优势,换句话说就是随着CPU核心数的增长能够线性的扩展吞吐量。

所以采用Actor模式,完全避免锁机制,并让每个线程能够全速运行。线程间的通信是通过在线程间传递异步消息(事件)来实现的。

并发线程/进程的通信

标签:机制   网络协议   在线   一般来说   区域   ace   并发   类的方法   基于   

原文地址:https://www.cnblogs.com/briskzou/p/12100208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!