iOS跨线程与跨进程通讯

MachPort是基于Mach内核实现的一种跨线程通讯方式,通过消息(message)和端口(port)进行数据传递。MachIPC扩展了这一概念,实现了跨进程通讯。通讯过程中,拥有发送权限的mach_msg结构体发送消息到指定端口,持有接收权限的mach_msg则会阻塞等待,当接收到消息或端口集中的任何端口有消息时,阻塞解除,线程继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mach Port:基于Mach 内核实现跨线程通讯,在通讯中涉及到的对象(messages消息,ports端口,port sets 端口集)
Mach IPC:跨进程通讯,是基于跨线程通讯实现的
跨线程通讯实现原理
是依赖于端口(port)实现的。当我们在线程中创建一个拥有指定端口接收权限的mach_msg结构体,就会阻塞住当前的线程,等待接收消息。当另一个线程中一个拥有发送权限的mach_msg向该端口发送消息时,就会解除当前线程的阻塞状态。
依赖的端口也可以是一个端口集(port set),就是多个端口,只要其中任意一个端口接到消息,就会解除阻塞状态,继续执行。

// 拥有发送权限的mach_msg
mach_msg(msg, MACH_SEND_MSG, 0, msg->msgh_size, port, timeout, MACH_PORT_NULL);

// 拥有接收权限的mach_msg
mach_msg(msg, MACH_RCV_MSG, 0, msg->msgh_size, port, timeout, MACH_PORT_NULL);

整个线程间通讯的流程图如下:


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值